На многих интернет-ресурсах, определенные части страниц повторяются. Часто, для этих частей создают отдельные шаблоны, которые включают на каждую страницу. Но это может быть неудобным, когда верстка меняется так, что два шаблона можно слить в один. Или наоборот, удалить шаблон. Тогда разработчику приходится пробегать по всем страницам сайта и выкидывать включение шаблона. предлагает другой подход. Суть этого подхода заключается в том, что данные со страницы проходят определенный набор декораторов, принимая нужную форму представления.

Первым делом, необходимо включить фильтр . Для этого, в web.xml следует добавить следующие строки:

XML:
  1. <filter>
  2.     <filter-name>sitemesh</filter-name>
  3.     <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
  4. </filter>
  5.  
  6. <filter-mapping>
  7.     <filter-name>sitemesh</filter-name>
  8.     <url-pattern>/*</url-pattern>
  9. </filter-mapping>

После того, как фильтр включен, создаем пока пустой файл WEB-INF/decorators.xml. Также необходимо создать файл конфигурации - WEB-INF/.xml, содержащий объявление классов - разборщиков страниц, объявление пути к файлу decorators.xml, и другую информацию:

XML:
  1. <sitemesh>
  2.     <property name="decorators-file" value="/WEB-INF/decorators.xml" />
  3.     <excludes file="${decorators-file}" />
  4.  
  5.     <page-parsers>
  6.         <parser content-type="text/html"
  7.             class="com.opensymphony.module.sitemesh.parser.HTMLPageParser" />
  8.         <parser content-type="text/html;charset=ISO-8859-1"
  9.             class="com.opensymphony.module.sitemesh.parser.HTMLPageParser" />
  10.     </page-parsers>
  11.  
  12.     <decorator-mappers>
  13.         <mapper class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper">
  14.             <param name="config" value="${decorators-file}" />
  15.         </mapper>
  16.     </decorator-mappers>
  17. </sitemesh>

На этом конфигурация закончена. Теперь можно создать простейший декоратор, рабивающий страницу на две части - навигацию и область данных. Создадим файл /decorators/layout.jsp:

XML:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
  3.     xmlns:decorator="http://www.opensymphony.com/sitemesh/decorator" version="2.0">
  4.     <html>
  5.     <head>
  6.     <title><decorator:title default=" example" /></title>
  7.     </head>
  8.     <body>
  9.     <div style="width=200px;float:left;margin-right:10px;">
  10.     <ul>
  11.         <li>Page 1</li>
  12.         <li>Page 2</li>
  13.         <li>Page 3</li>
  14.     </ul>
  15.     </div>
  16.     <div style="float:left;"><decorator:body /></div>
  17.     </body>
  18.     </html>
  19. </jsp:root>

должен знать об этом декораторе. Поэтому его необходимо прописать в decorators.xml:

XML:
  1. <decorators defaultdir="/decorators">
  2.     <decorator name="layout" page="layout.jsp">
  3.           <pattern>/*</pattern>
  4.     </decorator>
  5. </decorators>

Теперь, открыв любую страницу приложения, вы увидите слева - меню, а справа - тело страницы, сгенерированное контроллером.

Связанные записи