Tiles

Spring MVC에서는 Tiles1, Tiles2를 각각 지원하는 viewClass를 제공한다. 본 매뉴얼에서는 Tiles2와의 연계 방안에 대해 설명할 것이며 기본적인 viewResolver에 대한 내용은 Spring MVC >> Configuration >> action-servlet.xml 의 viewResolver 정의 부분을 참고한다. Spring MVC 2.5와 Tiles2를 연계하기 위해서는 JDK1.5 이상, Tiles 2.0.4 이상, Commons BeanUtils, Commons Digester, Commons Logging이 필요하다. Tiles2를 연계하기 위해서는 아래와 같은 절차를 따른다.

Tiles view class 정의

viewResolver 정의 부분에서 간략하게 설명했듯이 tiles2를 이용하기 위해서는 UrlBasedViewResolver를 정의한 후 viewClass를 아래 코드와 같이 tiles2로 정의해줘야 한다.
<bean id="tilesViewResolver"
	class="org.springframework.web.servlet.view.UrlBasedViewResolver">
	<property name="viewClass"
		value="org.springframework.web.servlet.view.tiles2.TilesView" />
</bean>

TilesConfigurer 정의

Tiles 매핑 관련 정보가 작성되어 있는 tiles definition 파일의 위치를 정의해줘야 하는데 이 때 TilesConfigurer를 아래와 같이 정의해 준다.
<bean id="tilesConfigurer"
	class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
	<property name="definitions">
		<list>
			<value>/WEB-INF/tiles-def.xml</value>
		</list>
	</property>
</bean>
위와 같이 정의할 경우 /WEB-INF/tiles-def.xml 파일을 로드하여 각 view 이름에 맞는 tiles view를 리턴해 준다.

Tiles definition 파일 작성

Tiles를 사용하기 위해서는 실제 Controller에서 리턴된 view 이름을 토대로 페이지에 출력해줄 tiles attribute를 정의해주는 tiles definition을 정의해 줘야한다. (위의 tilesConfigurer 위치로 정의한 tiles-def.xml 파일) 다음은 tiles definition 정의 예이다.
<definition name="template" template="/sample/layouts/layout.jsp">
	<put-attribute name="header" value="/sample/layouts/top.jsp" />
	<put-attribute name="body" value="/sample/layouts/welcome.jsp" />
	<put-attribute name="footer" value="/sample/layouts/left.jsp" />
</definition>
<definition name="listCategory" extends="template">
	<put-attribute name="body" value="/sample/category/listCategory.jsp" />
</definition>
먼저 Layout을 정의한 jsp 페이지를 정의한다. 해당 layout.jsp 페이지에서 기본적으로 사용할 페이지 구성 요소(위의 예에선 header, body, footer)들을 정의한 후 다른 view들은 미리 정의된 template이라는 definition을 extends하여 body만 설정하여 사용할 수 있다. 위의 예에서 listCategory라는 이름의 view가 리턴될 경우 "/sample/layouts/layout.jsp" 페이지의 레이아웃으로 header에는 "/sample/layouts/top.jsp" body는 "/sample/category/listCategory.jsp", footer는 "/sample/layouts/left.jsp"이 될 것이다. JSP에서 tiles 구성 요소를 넣을 때는 아래와 같이 tiles taglib을 정의한 후 <tiles:insertAttribute> 태그를 이용하여 사용한다.
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>
...중략...
<tr>
	<td colspan="2"><tiles:insertAttribute name="header" /></td>
</tr>
<tr>
	<td valign="top"><tiles:insertAttribute name="footer" /></td>
	<td valign="top"><tiles:insertAttribute name="body" /></td>
</tr>
name attribute에 들어갈 이름은 tiles definition 파일의 name attribute의 이름이 된다.