SSISO Community

시소당

sitemesh의 핵심

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"/>

1113 view

4.0 stars