Tiles framework 기본 구성
Spring 프로젝트 임.
1. pom.xml에 maven 의존성을 추가 해준다.
<!-- tiles 버전 명시 -->
<org.apache.tiles-version>3.0.8</org.apache.tiles-version>
<!-- Tiles Framework 관련 version 은 위에 명시해둠 -->
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-servlet</artifactId>
<version>${org.apache.tiles-version}</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-api</artifactId>
<version>${org.apache.tiles-version}</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-jsp</artifactId>
<version>${org.apache.tiles-version}</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-core</artifactId>
<version>${org.apache.tiles-version}</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-template</artifactId>
<version>${org.apache.tiles-version}</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-extras</artifactId>
<version>${org.apache.tiles-version}</version>
</dependency>
2.dispatcher-servlet.xml 설정
노란박스처럼 설정을 해준 뒤 , 빨간 박스안의 order 의 순서를 변경해야한다.
order = "value" 의 값이 낮을수록 우선 순위로 읽어 들이는 것을 고려 하기 때문에
Tiles 의 order value 값이 낮을 수록 Tiles의 구성을 먼저 읽어들인다.
<!-- Tiles 우선순위를 첫번째로 고려하도록 변경 -->
<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" id="tilesViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView"/>
<property name="order" value="1"/>
</bean>
<!-- Tiles 관련 설정 -->
<bean class="org.springframework.web.servlet.view.tiles3.TilesConfigurer" id="tilesConfigurer">
<property name="definitions">
<list>
<value>/WEB-INF/tiles/tiles.xml</value>
</list>
</property>
</bean>
3. tiles.xml 구성
위의 dispatcher-servelt.xml 에 설정한 <list>안의 value 위치에 있는 xml 을 만들고 설정을 하자 ( 주황색 박스 )
(3)은 따라하지 않아도 될거 같다 잠깐 오류생김;
<?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">
<!--
기본적인 템플릿 생성
header, body, footer 를 가진 tamplate.jsp 라는 기본 레이아웃을 정의
이 정의된 레이아웃의 name속성인 base를 상속하여 추가적으로 여러 tiles들을 만들수 있다.
-->
<tiles-definitions>
<!-- name과 template의 value는 내가 정하는 것 -->
<definition name="base" template="/WEB-INF/tiles/template.jsp">
<put-attribute name="header" value="/WEB-INF/tiles/header.jsp"/>
<put-attribute name="left" value="/WEB-INF/tiles/left.jsp"/>
<put-attribute name="body" value=""/>
<put-attribute name="right" value="/WEB-INF/tiles/right.jsp"/>
<put-attribute name="footer" value="/WEB-INF/tiles/footer.jsp"/>
</definition>
<!--
메뉴표시
base를 상속 받은 것.
body 부분만 설정한 경로대로 갈아 끼우고, 나머지 header, footer는 base의 형식대로 상속받아 오는 것.
-->
<definition name="*.page" extends="base">
<put-attribute name="body" value="/WEB-INF/views/{1}.jsp"/>
</definition>
<definition name="*/*.page" extends="base">
<put-attribute name="body" value="/WEB-INF/views/{1}/{2}.jsp"/>
</definition>
<definition name="*/*/*.page" extends="base">
<put-attribute name="body" value="/WEB-INF/views/{1}/{2}/{3}.jsp"/>
</definition>
<definition name="*/*/*/*.page" extends="base">
<put-attribute name="body" value="/WEB-INF/views/{1}/{2}/{3}/{4}.jsp"/>
</definition>
<definition name="*/*/*/*/*.page" extends="base">
<put-attribute name="body" value="/WEB-INF/views/{1}/{2}/{3}/{4}/{5}.jsp"/>
</definition>
<!--
메뉴 미표시
페이지 중 로그인 페이지는 보통 header, footer 모두를 레이아웃으로 가지지 않는다.
다만, header에 js 라이브러리 등을 포함하고 있을 것이므로 이런 특정 경로의 jsp 파일들은 header만 상속박고 footer는 사용하지 않는 방식으로 할 수 있다.
-->
<definition name="baseEmpty" template="/WEB-INF/tiles/templateEmpty.jsp">
</definition>
<definition name="*.part" template="baseEmpty">
<put-attribute name="body" value="/WEB-INF/views/{1}.jsp"/>
</definition>
<definition name="*/*.part" template="baseEmpty">
<put-attribute name="body" value="/WEB-INF/views/{1}/{2}.jsp"/>
</definition>
<definition name="*/*/*.part" template="baseEmpty">
<put-attribute name="body" value="/WEB-INF/views/{1}/{2}/{3}.jsp"/>
</definition>
<definition name="*/*/*/*.part" template="baseEmpty">
<put-attribute name="body" value="/WEB-INF/views/{1}/{2}/{3}/{4}.jsp"/>
</definition>
<definition name="*/*/*/*/*.part" template="baseEmpty">
<put-attribute name="body" value="/WEB-INF/views/{1}/{2}/{3}/{4}/{5}.jsp"/>
</definition>
</tiles-definitions>
4. tiles.xml 에 설정을 다 했으면, tiles directroy 를 만들어서 (아니면 원하는 자리에 설정해서 넣어줘도 무방)
각각의 해당하는 JSP 파일을 만들어 주자
header, footer, left(Menu), right(Menu), template, templateEmpty
이런식으로 원하는 식의 커스텀이 가능하고 원하는 곳에 tiles.xml에 설정한것을 <tiles: insertAttribute> 시켜서 넣어준다.
taglib 선언을 해주자 :: tiles 는 물론이거니와 jstl 이 없으면 안되는거 같다.
같이 선언해주자
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%-- tiles framework 선언부 --%>
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles" %>
또한 아래에 이런식으로 script도 적어두자 왜적는지는 모르겠던데 그냥 적으셈 ㅎㅎ;
<script type="text/javascript">
$(function () {
});
</script>
***
참고용 body 부분만 긁어가거나 참고하자
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><tiles:getAsString name="title" ignore="true" /></title>
</head>
<body>
<table border="1" cellpadding="2" cellspacing="2" align="center">
<tr>
<td height="20%" colspan="2">
<tiles:insert attribute="header" ignore="true" />
</td>
</tr>
<tr>
<td width="20%" height="250">
<tiles:insert attribute="menu" />
</td>
<td>
<tiles:insert attribute="body" />
</td>
</tr>
<tr>
<td height="20%" colspan="2">
<tiles:insert attribute="footer" />
</td>
</tr>
</table>
</body>
</html>
5. views에 test 할 jsp 하나를 만들고 컨트롤러에서 실행하자.
// body 부분
@RequestMapping(value = "/test2")
public String test2() {
return "/test2.page";
}
이렇게 하면 된다. ㅇㅇ
6. 결과
짠 완성 ㅇㅇ
구성이야 입맛대로 꾸미면 되니 알아서 하자.
참고사이트
https://dzone.com/tutorials/java/struts/struts-example/struts-tiles-example-1.html
Struts Tiles Tutorial - DZone
Tiles is used to create reusable presentation components. With Tiles, we first define a base layout with different sections after that we define which jsp page...
dzone.com