
스트럿츠의 타일즈는 일반적인 JSP의 INCLUDE 구문과 많은 부분이 닮아있다.
하지만 INCLUDE 구문은 각각의 JSP 페이지마다 사용해서 페이지 리소스의 재사용성을 높인다.
하지만 이 경우 LAYOUT에 조정이 필요한 경우 모든 페이지의 구성을 수동으로 바꾸어 주어야 한다.
타일즈에서는 이를 최상단에 layout을 설정한 템플릿을 두고 이를 이용하여 레이아웃의 변경만으로 모든 페이지를 변경할 수 있도록 하여 재사용성을 높인다.
TILES 설정하기
WEB_INF 안에 struts-tiles.tld 와 tiles-config.dtd 를 놓는다.
WEB-INF/lib 안에는
tiles.jar
Commons-digester.jar
Commons-beanutils.jar
Commons-collections.jar
Commons-logging.jar 를 놓는다.
모두 스트럿츠 1.1 패키지 안에 들어있다.
스트럿츠를 사용하고있다면 아마 모두 설치되어있을것이다.
스트럿츠에서 타일즈를 사용하기위해서는 페이지의 상단에
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %>
를 선언하여 타일즈 태그를 사용해주면된다.
하지만 타일즈 difinitions를 사용하면 보다 쉽게 화면을 구성할수있다.
타일즈 difinitions를 사용하기 위해서는 struts-config.xml 에 타일즈 설정화일의
정보를 입력해주어야한다.
<plug-in className="org.apache.struts.tiles.TilesPlugin">
<set-property property="definitions-config" value="/WEB-INF/xmls/tiles-defs.xml" />
<set-property property="definitions-debug" value="2" />
<set-property property="definitions-parser-details" value="2" />
<set-property property="definitions-parser-validate" value="true" />
</plug-in>
가장 상위의 definitions-config만 설정해주면 되지만 밑의 디버그 정보들도 같이 써주자.
===================================================================================
Tiles Definitions (tiles-defs.xml)
-----------------------------------------------------------------------------------
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd">
<tiles-definitions>
<!-- ====================================== //-->
<!-- Board Default Layout Definition //-->
<!-- ====================================== //-->
<definition name="board.default.layout" path="/jsp/layouts/boardDefault.jsp">
<put name="title" value="struts board" />
<put name="topMenu" value="/jsp/common/topMenu.jsp" />
<put name="leftMenu" value="/jsp/common/leftMenu.jsp" />
<put name="body" value="board.body" />
<put name="copyright" value="/jsp/common/copyRight.jsp" />
</definition>
<definition name="board.default2.layout" path="/jsp/layouts/boardDefault2.jsp">
<put name="title" value="struts board" />
<put name="leftMenu" value="/jsp/common/leftMenu.jsp" />
<put name="body" value="board.body" />
<put name="copyright" value="/jsp/common/copyRight.jsp" />
</definition>
</tiles-definitions>
===================================================================================
LAYOUT 템플릿 정의하기
-----------------------------------------------------------------------------------
<%@ page contentType="text/html;charset=euc-kr" %>
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<html:html locale="true">
<head>
<html:base/>
<title><tiles:getAsString name="title"/></title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
<link rel=stylesheet href="/css/board.css" type="text/css">
<script language=" JavaScript " src=http://img.yahoo.co.kr/blank.gif> <script language=" JavaScript " src=http://img.yahoo.co.kr/blank.gif></head>
<body topmargin="0" leftmargin="0">
<table border="0" cellpadding="0" cellspacing="0" align="center">
<!-- 상위메뉴 //-->
<tr>
<td>
<tiles:insert attribute="topMenu" />
</td>
</tr>
<tr height="350" valign="top">
<!-- 내용 //-->
<td width="140" valign="top">
<tiles:insert attribute="leftMenu" />
</td>
<td valign="top">
<tiles:insert attribute="body" />
</td>
<!-- 저작권 //-->
</tr>
<tr>
<td height="70" valign="bottom" colspan="2">
<tiles:insert attribute="copyright" />
</td>
</tr>
</table>
</body>
</html:html>
attribute값을 이용해 페이지의 삽입부분을 설정한다.
위의 레이아웃 페이지의 attribute값의 부분마다 tiles-defs.xml 파일에서 설정한 페이지 리소스가 들어가게된다.
Difinition은 이외에도 자바와 같이 상속의 개념을 이용해 보다 동적인 리소스의 이용이 가능하게 되었다.
예를 들어 dinition name board.default.layout.pds는 board.default.layout을 상속받는다.
상속받은 board.default.layout.pds은 board.default.layout의속성을 모두 가지며 put 태그를 통해 원하는 부분만을 오버라이드 해서 변경할수있다.
그럼 jsp 페이지에서는 definition 설정을 불러옴으로서 JSP 소스와 콘텐츠를 완벽하게 분리하여 재사용할수있다.
% 만약 안될경우에는
RequestProcessor를 타일즈 TilesRequestProcessor로 확장해야한다.
-----------------------------------------------------------------------------------
import org.apache.struts.tiles.TilesRequestProcessor;
public class myRequestProcessor extends TilesRequestProcessor {
protected boolean processPreprocess(
HttpServletRequest request,
&n
No comments:
Post a Comment