현재 진행하고 있는 프로젝트에서 Tiles를 사용하고 있는데 다음과 같이 defaultLayout의 left를 동적으로 바꿀 수 있는 방법에 대해서 얘기가 나왔다.
<definition name="defaultLayout" template="/WEB-INF/view/common/layout/default/layout.jsp">
<put-attribute name="header" value="/WEB-INF/view/common/layout/default/header.jsp" />
<put-attribute name="left" value="/WEB-INF/view/common/layout/default/left.jsp" />
<put-attribute name="body" value="/WEB-INF/view/common/layout/default/blank.jsp" />
<put-attribute name="footer" value="/WEB-INF/view/common/layout/default/footer.jsp" />
</definition>
흔히 tiles를 이용할 때 사용하는 방법은 다음과 같이 새로운 definition을 정의한 후 body와 left를 put하는 방법을 이용한다.
<definition name="main" extends="defaultLayout">
<put-attribute name="body" value="/WEB-INF/view/main/main.jsp" />
<put-attribute name="left" value="/WEB-INF/view/main/leftMain.jsp" />
</definition>
하지만 특정 요구 사항으로 인하여 xml 설정이 아닌 코드를 이용하여 left 영역을 동적으로 바꿀 수 있는 방법을 찾아야 했다.
찾아보니 ViewPreparer 인터페이스가 있었고, 해당 인터페이스를 구현하면 tiles definition을 렌더링하기 전에 execute 메소드가 실행된다.
해당 메소드 안에서 다음의 코드와 같이 putAttribute 메소드를 이용하여 layoutId 변수 값에 따른 left 영역을 동적으로 변경할 수가 있다.
attributeContext.putAttribute("left", new Attribute("/WEB-INF/view/" + layoutId + "/test.jsp"))
전처리 작업을 하기 위해서는 tiles XML 설정 파일의 definition element에 preparer="ViewPreparer 인터페이스를 구현한 class경로" 를 정의하면 됨.
https://tiles.apache.org/framework/tutorial/advanced/preparer.html
'프로그래밍' 카테고리의 다른 글
My first Java8 Programming (0) | 2014.06.20 |
---|---|
bean 엘리먼트의 parent attribute 사용 (0) | 2014.05.22 |
spring util:map 사용 시 key와 value 타입 지정 (0) | 2014.05.17 |
c:import 사용 시 주의사항 (Request method 'POST' not supported) (2) | 2014.05.16 |
HTTP request body copy 방법 (0) | 2014.04.29 |
javascript self closing 문제 (2) | 2014.04.16 |
Spring MappingJacksonJsonView modelKey가 하는 역할 (0) | 2014.03.15 |
JUnit private method test (0) | 2014.03.04 |