본문 바로가기

Frontend/jQuery & JSTL

[JSTL] jsp를 포함하는 jsp구성

반응형

1.jsp에서 2.jsp를 포함하는 웹 페이지를 구성

<!-- 1.jsp -->
<script type="text/javascript">
	if(type == "test"){ 
		$("#sample-data").show();
		$.ajax({
			type: 'POST',
			url: '/test/sample',
			data: { testId: testId },
			success: function(response){
				console.log("send!!");
			},
			error: function(error){
				console.log("wrong....");
			}
		});
	}
</script>
<div class="sample-data" id="sample-data" style="display: block;">
	<jsp:include page="2.jsp" flush="true"/>
</div>
<!-- 2.jsp -->
<html>
<body>
	<script>
	function setSample(){    
		$.ajax({
    		method: "GET",
        	url: "/test/sample/"});
		}
	setSample();
    </script>
</body>
</html>

그리고 ajax통신이 success하면 jsp를 새로고침 하는 구조로 만들고 싶었다.

 

1트 - ajax결과에 새로고침 코드 추가

<!-- 1.jsp -->
<script type="text/javascript">
	if(type == "test"){ 
		$("#sample-data").show();
		$.ajax({
			type: 'POST',
			url: '/test/sample',
			data: { testId: testId },
			success: function(response){
				console.log("send!!");
				<!-- 1. $("#sample-data").load(location.href + " #sample-data"); -->
				<!-- 2. $("#sample-data").load('test/sample'); -->
			},
			error: function(error){
				console.log("wrong....");
			}
		});
	}
</script>
<div class="sample-data" id="sample-data" style="display: block;">
	<jsp:include page="2.jsp" flush="true"/>
</div>

1. 방법은 #sample-data 부분을 새로고침 하는 것이다.

2. 방법은 #sample-data 부분에 새로 URL을 불러오는 것이다.

1. 방법은 무한반복 일어나고 2. 방법은 JSON자체를 출력해서 사용 할 수 없었다.

 

2트 - function을 다시 불러오도록 수정

<!-- 1.jsp -->
<script type="text/javascript">
	if(type == "test"){ 
		$("#sample-data").show();
		$.ajax({
			type: 'POST',
			url: '/test/sample',
			data: { testId: testId },
			success: function(response){
				console.log("send!!");
                setDataInajax();
			},
			error: function(error){
				console.log("wrong....");
			}
		});
	}
</script>
<div class="sample-data" id="sample-data" style="display: block;">
	<jsp:include page="2.jsp" flush="true"/>
</div>
<!-- 2.jsp -->
<html>
<body>
	<script>
		function setSample(){
			$.ajax({
				method: "GET",
				url: "/test/sample/"});
			}
		setSample();
		funnction setDataInajax(){
			setSample();
		}
	</script>
</body>
</html>

이렇게 하니 2.jsp의 setSample()을 다시 실행하나 기존 JSON데이터가 초기화 되지 않고 그 위에 데이터가 쌓이고 있었다.

해당 이슈와는 별개로 2.jsp의 데이터가 변하지 않아 Controller단에서 로그를 확인해보니 ajax로 POST했던 testId가 정상적으로 넘어가서 DB쿼리까지 정상적으로 되었으나 다시 재호출 되면서 testId가 null로 바뀌는 이슈가 있었다.

 

해결해야 할 이슈가 변경되었다.

1. 2.jsp에서 JSON데이터 초기화

2. Controller 재호출 방지

 

고민하다 나온 결론은 2.jsp에서 ajax를 하면서 GET을 하는데 이때 testId가 없이 GET을 해서 이런 이슈가 나오는 것 같다.

돌고 돌아 다시 원점으로 돌아온것 같다.

결국에는 jsp안에 jsp로 parameter를 넘겨줘야 하는 방법을 찾아봐야 할것 같다.

 

+ ) tiles를 이용해 1.jsp와 2.jsp를 변경하게 하는건 어떨까?

반응형