이번 글은 Tiles2 설정시 DynamicTiles를 이용하여 설정하는 방법에 대해 설명을 해 본다.
DynamicTiles는 http://www.springbyexample.org/ 사이트를 운영하는 개발자가 만든 라이브러리인데, 앞서 얘기한 것처럼 기본적인 Tiles를 적용하게 되면 view가 새로 생길때마다 Tiles설정파일에도 추가를 해야 하는 번거로움이 있었는데, 이를 어느 정도 해결해 준 게 바로 DynamicTiles이다. 보다 자세한 내용은 위의 사이트를 참고하면 된다. -.-a;;
* 먼저 해당 라이브러리를 다운받는다. (pom.xml에 아래 내용 추가)
더보기 접기
<dependency>
<groupId>org.springbyexample</groupId>
<artifactId>sbe-dynamic-tiles2</artifactId>
<version>1.2.1</version>
</dependency>
그리고, Repository도 추가해 준다.(요건 <dependencies></dependencies> 밖에 추가~)
<repositories>
<repository>
<id>springbyexample.org</id>
<name>Spring by Example</name>
<url>http://www.springbyexample.org/maven/repo</url>
</repository>
</repositories>
접기
참고로 메이븐 설정 관련내용은 [여기 ]를 참고~
* viewResolver 관련 설정(기존 설정은 과감하게 주석처뤼~)
/ MyProject /src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml
더보기 접기
<!-- Tiles 2 resolver. (과감하게 주석태그로 휘감는다~!)
<beans:bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<beans:property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView" />
<beans:property name="order" value="1" />
</beans:bean>
-->
<!-- Dynamic Tiles 2 resolver. 새로 추가 -->
<beans:bean id="tilesViewResolver " class="org.springbyexample.web.servlet.view.tiles2.TilesUrlBasedViewResolver ">
<beans:property name="viewClass" value="org.springbyexample.web.servlet.view.tiles2.DynamicTilesView " />
<beans:property name="prefix" value="/WEB-INF/views/"/>
<beans:property name="suffix" value=".jsp"/>
<beans:property name="tilesDefinitionName" value="default" />
<beans:property name="tilesBodyAttributeName" value="body" />
<beans:property name="tilesDefinitionDelimiter" value="." />
<beans:property name="contentType" value="text/html; charset=UTF-8" />
<beans:property name="order" value="1" />
</beans:bean>
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory ( 이 부분도 주석으로 휘감는다~~!!)
<beans:bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
<beans:property name="order" value="2" />
</beans:bean>
-->
접기
위의 설정에서 보면, 새로 추가된 tilesViewResolver 에서
Resolver class 는 org.springbyexample.web.servlet.view.tiles2.TilesUrlBasedViewResolver
viewClass 는 org.springbyexample.web.servlet.view.tiles2.DynamicTilesView
이걸로 변경된 걸 알 수 있다.
* / MyProject/src/main/webapp / WEB-INF/tiles/tiles-def.xml 수정.
더보기 접기
<!-- tiles2 (과감하게 주석처뤼~!!)
<definition name=".default" template="/WEB-INF/views/layout/layout_basic.jsp">
<put-attribute name="title" value="레이아웃페이지" />
<put-attribute name="header" value="/WEB-INF/views/layout/layout_header.jsp" />
<put-attribute name="topMenu" value="/WEB-INF/views/layout/layout_topMenu.jsp" />
<put-attribute name="body" value="/WEB-INF/views/layout/layout_body.jsp" />
<put-attribute name="footer" value="/WEB-INF/views/layout/layout_footer.jsp" />
</definition>
<definition name="home" extends=".default">
<put-attribute name="title" value="HOME Tiles2 TEST" />
<put-attribute name="body" value="/WEB-INF/views/home.jsp" />
</definition>
-->
<!-- dynamic tiles2 -->
<definition name=".default" template="/WEB-INF/views/layout/layout_basic.jsp">
<put-attribute name="title" value="basic title" />
<put-attribute name="header" value="/WEB-INF/views/layout/layout_header.jsp" />
<put-attribute name="topMenu" value="/WEB-INF/views/layout/layout_topMenu.jsp" />
<put-attribute name="body" value="/WEB-INF/views/layout/layout_body.jsp" />
<put-attribute name="footer" value="/WEB-INF/views/layout/layout_footer.jsp" />
</definition>
<definition name="home" extends=".default">
<put-attribute name="title" value="HOME TEST" />
<put-attribute name="body" value="/WEB-INF/views/home.jsp" />
</definition>
접기 기본 tiles 설정시[이전글 ]에는 view가 home일 경우에는 tiles 적용이 되고 그 외의 view에서는 tiles 적용이 안되었으나, 이제 위와 같이 설정하게 되면, 아래 화면처럼 home이 아닌 다른 view에서도 tiles가 적용되게 된다.
[기본 tiles 설정시]
[Dynamic Tiles 설정시] (아무리 테스트 페이지라고 하지만 너무 막 만들었네..ㅡ.ㅡa;;)
특별한 view일 경우에는 tiles-def.xml에 definition을 추가하면 되고, 그렇지 않을 경우에는 기본(default)로 설정한 tiles값이 view에 반영되도록 하면 된다.
[참고] : http://yunsunghan.tistory.com/259