sitemesh의 핵심~~~
sitemesh 설치
sitemesh : http://www.opensymphony.com/sitemesh download : http://www.opensymphony.com/sitemesh/download.action 다운받았다면 WEB-INF/lib아래 복사해 넣으면 된다.
sitemesh 설정하기 [web.xml]
<filter> <filter-name>sitemesh</filter-name> <filter-class> com.opensymphony.module.sitemesh.filter.PageFilter </filter-class> </filter> <filter-mapping> <filter-name>sitemesh</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
위의 내용을 보면 알 수 있듯이 사이트메쉬는 필터 기반이다. 해당 페이지를 전혀 건드리지 않고 레이아웃을 설정할 수 있게해주며 사용하기 쉽다.
WEB-INF/sitemesh.xml
<?xml version="1.0" encoding="UTF-8"?> <sitemesh> <property name="decorators-file" value="/WEB-INF/decorators.xml" /> <!-- decorator 정의 파일 위치 설정--> <excludes file="${decorators-file}" />
<!-- parser를 설정한다. 어떻게 parsing 해서 레이아웃을 입힐 것인지 결정한다. --> <page-parsers> <parser content-type="text/html" class="com.opensymphony.module.sitemesh.parser.HTMLPageParser" /> <parser content-type="text/html;charset=UTF-8" class="com.opensymphony.module.sitemesh.parser.HTMLPageParser" /> </page-parsers>
<!-- mapper를 설정한다. 다양한 레이아웃 결정 방법을 제공한다. --> <decorator-mappers> <!-- 파라미터에 printable=true 하면 printable이라는 이름의 레이아웃을 적용한다. --> <mapper class="com.opensymphony.module.sitemesh.mapper.PrintableDecoratorMapper"> <param name="decorator" value="printable" /> <param name="parameter.name" value="printable" /> <param name="parameter.value" value="true" /> </mapper>
<!-- 페이지의 meta tag에 이름을 decorator라고 하고 거기에 적용할 레이아웃을 설정하면 된다. --> <mapper class="com.opensymphony.module.sitemesh.mapper.PageDecoratorMapper" > <param name="property" value="meta.decorator" /> </mapper>
<!-- /WEB-INF/decorators.xml 파일에 정의된 걸 적용한다. --> <mapper class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper"> <param name="config" value="${decorators-file}" /> </mapper> </decorator-mappers> </sitemesh>
WEB-INF/decorators.xml
<?xml version="1.0" encoding="UTF-8"?> <decorators defaultdir="/decorator"> <!-- 입력한 주소가 /test/어쩌구.jsp 이런 패턴이면 아래 레이아웃이 적용된다. --> <decorator name="main" page="testLayout.jsp"> <pattern>/test/*</pattern> </decorator> <decorator name="panel" page="panel.jsp"/> <decorator name="kkaok" page="panel.jsp"/> <decorator name="printable" page="printable.jsp"/> </decorators>
레이아웃 페이지에 값 전달 하기
content 이용하기
해당페이지 : <content tag="tagName">값이 넘어가나요.</content> 레이아웃페이지 : <decorator:getProperty property="page.tagName"/> <content>를 이용하고 tag에 이름을 주면 해당 블럭의 값이 전달된다. meta tag 이용하기 해당페이지 <meta name="email" content=" abc@abc.abc"> <meta name="author" content="it's me 나요"> 레이아웃 페이지 <br>메타 태그로 값 받기 meta.author : <decorator:getProperty property="meta.author"/> <br>메타 태그로 값 받기 meta.email : <decorator:getProperty property="meta.email"/> layout 정의 된 title에 값 넣기 해당페이지 <title>학교종이 땡땡땡</title> 레이아웃 페이지 이렇게 하면 html 태그를 읽어서 <decorator:title default="Welcome!" /> 이곳에 값을 넣어준다.
layout에 인클루드한 값 공유하기
request.setAttribute(key, valuel); 이렇게 하면 해당값에서 공유된다. body 페이지 처리하고 그결과를 layout 페이지에서 처리하기 때문에 가능함
layout 페이지에 넘어온 값을 동적으로 처리하기
<decorator:useHtmlPage id="html"/> <% String tmpVal = html.getProperty("meta.author"); %> <br> <jsp:include page="/common/head.gs"> <jsp:param name="kkaok" value="<%=tmpVal %>" /> </jsp:include>
mapper들 정리
PrintableDecoratorMapper 특정 페이지를 예외적으로 적용하고자 할때 사용 sitemesh.xml <decorator-mappers> <mapper class="com.opensymphony.module.sitemesh.mapper.PrintableDecoratorMapper"> <param name="decorator" value="printable" /> <param name="parameter.name" value="printable" /> <param name="parameter.value" value="true" /> </mapper> </decorator-mappers> 여기 보면 파라미터 명이 "printable"이고 value가 "true"면 decorator의 printable을 매핑해라라는 의미이다.
decorator.xml <decorators defaultdir="/decorators"> <decorator name="printable" page="printable.jsp"/> </decorators>
PageDecoratorMapper 페이지 단위로 처리하고자 할때 사용 sitemesh.xml <mapper class="com.opensymphony.module.sitemesh.mapper.PageDecoratorMapper" > <param name="property" value="meta.decorator" /> </mapper>
적용하고자 하는 페이지에 아래 처럼 선언되어 있다면 <meta name="decorator" content="kkaok"> decorator.xml에 정의되어 있는 레이아웃 페이지가 적용된다. <decorator name="kkaok" page="panel.jsp"/>
|