TIL (js에서 자바 변수/세션값 사용하기)

MIN.DI·2021년 8월 25일
0

TIL

목록 보기
10/15

1. jsp에서 scriptlet으로 선언한 변수를 js에서 사용하기

  1. 첫번째로 시도한 방법.

세션에 저장되어있는(=로그인된) 유저의 생년월일만 뽑아서 js에서 사용해야 하는데
jsp 바디에

<%
	UserVO user = (UserVO)session.getAttribute("__LOGIN__");
	Date d = user.getUserBday();
	
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
	String strd = sdf.format(d);
	
	String[] splitStrd = strd.split("/");
	
	String yyyy = splitStrd[0];
	String mm = splitStrd[1];
	String dd = splitStrd[2];
	
%>

로 변수를 정의하고

js에서

var yyyy ="<%= yyyy %>";
// var yyyy = <%= yyyy %>
// var yyyy = ${yyyy}
// var yyyy = "${yyyy}
	
var mm = "<%= mm %>";
var dd = "<%= dd %>";

이렇게 받으니 scriptlet 태그까지 문자열로 변수에 할당됨.
(주석은 다른 시도의 흔적들)

  1. 두번째로 시도한 방법.

jsp의 body에 hidden으로 값을 넘기고 js에서 받기.

<input type="hidden" id="bDay" value="{__LOGIN__.userBday}">

이렇게 하고 js에서 받았는데, 값이 계속 undefined로 나왔다.

  1. 해결

첫번째 시도했던 방법과 비슷한데, 대신 scriptlet 태그와 script의 위치를 변경해봄.
원래 scriptlet태그가 body 안에 있었는데, 이 부분을 head로 옮기고 (외부스크립트 링크보다 위쪽으로 배치)
변수선언까지 내부스크립트로 같이 진행했다.

	<%
	UserVO user = (UserVO)session.getAttribute("__LOGIN__");
	Date d = user.getUserBday();

	SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
	String strd = sdf.format(d);

	String[] splitStrd = strd.split("/");

	String yyyy = splitStrd[0];
	String mm = splitStrd[1];
	String dd = splitStrd[2];

	%>

	<script>
		var yyyy ="<%= yyyy %>";

		var mm = "<%= mm %>";
		var dd = "<%= dd %>";

	</script>
    
    <!-- 외부스크립트파일을 아래쪽에 배치 -->
    	<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
	<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-migrate/3.3.2/jquery-migrate.min.js"></script>
	
	<link rel="stylesheet" href="../../resources/css/userCommon.css" type="text/css">
	<link rel="stylesheet" href="../../resources/css/myPage.css" type="text/css">
	
	<script src="../../resources/js/userCommon.js"></script>
	<script src="../../resources/js/myPage.js"></script>

이렇게 하니까 해결됨....
그리고 변수 뒤에 선언된 외부스크립트 파일들에서는 변수명으로 바로 접근이 가능하다.

scriptlet태그가 jsp파일 내부에서만 먹히는건지.. 정확한 이유는 모르겠다 ㅠㅠ
어제 새벽부터 거의 5시간정도 매달린 것 같은데 순서문제였음...............................

++ WAS에서의 session과, 브라우저에서의 session은 다르다...
화면단에서 서버의 session 에 직접 접근할 방법은 없는듯..?

profile
내가 보려고 쓰는 블로그

0개의 댓글