Использование Sitemash
На многих интернет-ресурсах, определенные части страниц повторяются. Часто, для этих частей создают отдельные шаблоны, которые включают на каждую страницу. Но это может быть неудобным, когда верстка меняется так, что два шаблона можно слить в один. Или наоборот, удалить шаблон. Тогда разработчику приходится пробегать по всем страницам сайта и выкидывать включение шаблона. Sitemash предлагает другой подход. Суть этого подхода заключается в том, что данные со страницы проходят определенный набор декораторов, принимая нужную форму представления.
Первым делом, необходимо включить фильтр sitemash. Для этого, в 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/decorators.xml. Также необходимо создать файл конфигурации sitemash - WEB-INF/sitemash.xml, содержащий объявление классов - разборщиков страниц, объявление пути к файлу decorators.xml, и другую информацию:
-
<sitemesh>
-
<property name="decorators-file" value="/WEB-INF/decorators.xml" />
-
<excludes file="${decorators-file}" />
-
-
<page-parsers>
-
<parser content-type="text/html"
-
class="com.opensymphony.module.sitemesh.parser.HTMLPageParser" />
-
<parser content-type="text/html;charset=ISO-8859-1"
-
class="com.opensymphony.module.sitemesh.parser.HTMLPageParser" />
-
</page-parsers>
-
-
<decorator-mappers>
-
<mapper class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper">
-
<param name="config" value="${decorators-file}" />
-
</mapper>
-
</decorator-mappers>
-
</sitemesh>
На этом конфигурация закончена. Теперь можно создать простейший декоратор, рабивающий страницу на две части - навигацию и область данных. Создадим файл /decorators/layout.jsp:
-
<?xml version="1.0" encoding="UTF-8"?>
-
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
-
xmlns:decorator="http://www.opensymphony.com/sitemesh/decorator" version="2.0">
-
<html>
-
<head>
-
</head>
-
<body>
-
<div style="width=200px;float:left;margin-right:10px;">
-
<ul>
-
<li>Page 1</li>
-
<li>Page 2</li>
-
<li>Page 3</li>
-
</ul>
-
</div>
-
<div style="float:left;"><decorator:body /></div>
-
</body>
-
</html>
-
</jsp:root>
Sitemash должен знать об этом декораторе. Поэтому его необходимо прописать в decorators.xml:
-
<decorators defaultdir="/decorators">
-
<decorator name="layout" page="layout.jsp">
-
<pattern>/*</pattern>
-
</decorator>
-
</decorators>
Теперь, открыв любую страницу приложения, вы увидите слева - меню, а справа - тело страницы, сгенерированное контроллером.

21 Июль 2008 в 6:08 пп
[...] В большинстве случаев, используют библиотеку jstl, благодаря которой код jsp-страницы становится более структурированным и удобным для чтения. Также библиотека jstl содержит ряд полезных функций. Узнайте больше об использовани jstl… Также советую использовать библиотеку sitemash, для работы с шаблонами страниц. [...]