Java/Spring

[Spring] page 전환 없이 body(content)만 변경하는 방법

은정재 2022. 12. 5. 13:40

1. tiles.xml

template을 2개로 나누어 적용한다.

- mainLayout.jsp : 공통으로 사용될 header, menu, body(최초 로딩되는 페이지의 body), footer 구성

- mainLayout2.jsp : body(변경될 body)로만 구성

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
       "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">

<tiles-definitions>
    <definition name="*/*" template="/WEB-INF/jsp/tiles/mainLayout.jsp">
	<put-attribute name="header" value="/WEB-INF/jsp/tiles/header/mainHeader.jsp" />
	<put-attribute name="menu" value="/WEB-INF/jsp/tiles/menu/mainMenu.jsp" />
	<put-attribute name="body" value="/WEB-INF/jsp/{1}/{2}.jsp" />
        <put-attribute name="footer" value="/WEB-INF/jsp/tiles/footer/mainFooter.jsp" />
    </definition>

    <definition name="test/*/*" template="/WEB-INF/jsp/tiles/mainLayout2.jsp">
        <put-attribute name="body" value="/WEB-INF/jsp/{1}/{2}.jsp" cascade="true" />
    </definition>

</tiles-definitions>

 

2. Layout

mainLayout.jsp는 <main> 태그에 id를 부여하여 직접적으로 핸들링이 가능하도록 한다.

<!-- mainLayout.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8"	pageEncoding="UTF-8"%>
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>
<!DOCTYPE html>
<html lang="ko">
	<tiles:insertAttribute name="header" />
<body>
	<tiles:insertAttribute name="menu" />
	<main id="main"><tiles:insertAttribute name="body" /></main>
	<tiles:insertAttribute name="footer" />
</body>
</html>
<!-- mainLayout2.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8"	pageEncoding="UTF-8"%>
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>

	<tiles:insertAttribute name="body" />

 

3. JSP

Test를 위해 clickable한 영역을 준비한다.

<ul>
	<li id="_testTables">
		<div>
			<span>Click Here!</span>
		</div>
	</li>
</ul>

 

4. Javascript

위 <li> 선택 시 <main> 태그의 id를 활용하여 기존 body를 제거하고, 새로운 body를 생성한다.

$('#_testTables').on('click', function() {
	$('#main').children().remove();
	$('#main').load("/test/test.do");				
});

 

5. Controller

페이지 로딩(body부분만 변경)을 위한 컨트롤러 RequestMapping

- return 형식 : 반드시 tiles.xml의 definition 규칙을 준수해야 한다. ( definition name="test/*/*" )

@RequestMapping(value = "/test/test.do")
public String test(HttpServletRequest request, ModelMap model) throws Exception {
	return "test/tables/samplePage";
}

 

 


Test Environment Info.
- OS : Windows 10 Pro

- IDE : Eclipse 2019-03 (4.11.0)