- 표현식(JSTL) 안에서 var 변수를 사용할 수 있을까?
우리는 jsp에서 "${}" 형태의 표현식(expression)을 많이 보았을 것이다.
이 표현식은 컨트롤러에서 지정한 값을 사용하기 위해, tag로 함수를 호출하기 위해 사용한다.
/* 표현식을 이용하여 값을 불러온다 */
var bno = "${bno}";
/* 객체로 값을 불러올 수도 있다 */
var rno = "${reply.rno}";
/* 아래와 같이 함수도 사용 가능 */
var addDay = "${ufn:addDays('20220822', 5)}";
/* 표현식으로 불러온 함수의 파라미터로는 컨트롤러 값도 가능하다 */
var count = "${ufn:count(reply.rno,'20220822')}";
만약, 표현식으로 불러낸 함수의 파라미터로 스크립트 변수를 사용하고 싶다면?
/* 숫자 부분에 스크립트의 변수를 넣고 싶다 */
var count = "${ufn:count(board.bno, 숫자}";
var num = 5; /* 스크립트에서 선언한 변수 */
/* num이라는 문자열로 인식 */
var count = "${ufn:count(board.bno, 'num'}";
/* num을 찾을 수 없다고 함 */
var count = "${ufn:count(board.bno, num}";
/* 문법적인 에러 발생 */
var count = "${ufn:count(board.bno," + num + "}";
/* 백틱('`')을 사용해도 안되더라 */
var count = `${ufn:count(board.bno, num}`;
var count = `${ufn:count(board.bno, "num"}`;
/* 이건 당연히 말도 안되는거고.. */
var count = "${ufn:count(board.bno, ${num}}";
표현식 안에서는 스크립트의 변수를 사용할 수 없었다.
위에 예시는 단순히 초기화 한 것이지만..
만약 스크립트 내에서 함수로 가공한 값을 표현식 안에서 쓰고 싶다면 미쳐버릴 것이다.
왜 사용할 수 없는 것인가?
표현식(JSTL)과 스크립트의 실행 시점이 다르기 때문이다.
1) jsp가 실행될 때는 java 코드인 JSTL이 먼저 실행된다.
2) 이후 실행결과를 문자열 형태로 브라우저로 전송이 되고,
3) 브라우저에서 문자열을 parsing을 하여 JavaScript가 실행된다.
즉, JSTL이 실행될 때는 스크립트가 실행되기 전이기 때문에 스크립트의 변수를 사용할 수 없는 것이다.
→ 반대로 스크립트의 변수는 표현식(JSTL)에서 사용할 수 있다.
태그로 쓴 함수 내에 파라미터로 스크립트 변수를 쓰고 싶다면 ajax 사용을 추천한다.
- 참고 자료
OKKY - script에 선언한 var 변수 jstl에서 사용 방법
아래의 코드처럼 script에서 선언한 변수 x를 jstl인 c:if에서 test안에서 사용하고 싶습니다.어떻게 해야 test안에 x를 넣을 수 있나요? <script> var x = 1; </script> <c:if test = ?> < /c:if
okky.kr