Статьи

Простое шаблонное решение с SiteMesh


В этой статье я покажу вам, как использовать
SiteMesh на ваших веб-сайтах JEE для того, чтобы придать им чувство единства. Когда речь идет о шаблонах, метод, который все сначала используют, — это использование тегов <@include> во всей JSP. страницы. Этот порядок действий изначально ошибочен, поскольку все JSP отвечают за вызовы включений, и, следовательно, нет реального принуждения использовать правильные.

Наиболее используемый метод — Apache Tiles. Честно говоря, я не смотрел на Tiles, поскольку он перешел от Struts к Apache. Плитки Struts предназначались для использования совместно со Struts. Похоже, что Apache Tiles поддерживает гораздо больше технологий (JSP, Velocity, Freemarker и т. Д.), Но я не видел никакой поддержки JSF « из коробки», хотя, похоже, существует множество статей, посвященных этой теме и ее проблемам.

Когда я использовал Struts Tiles, я обнаружил, что это очень мощный фреймворк, но у многих начинающих разработчиков были некоторые проблемы с ним. В большинстве проектов, над которыми я работал, старший разработчик собирал плитки, а младшие создавали сами страницы. Я нашел Tiles очень настраиваемым, но это произошло ценой сложности. В большинстве случаев мне не нужны были все функции Tiles: я только хотел иметь заголовок, нижний колонтитул и меню, красиво оформленные вокруг моей главной страницы.

При исследовании AppFuse , я наткнулся на инструмент хорошего шаблонного , что просто делает это: SiteMesh. SiteMesh является технологически нейтральным, то есть его можно использовать с любой структурой представления, включая JSF . Он основан на очень простой концепции фильтров сервлетов. Файл XML формирует основу конфигурации шаблона. Эта конфигурация содержит какие страницы оформлены и какими шаблонами.

Механизм создания шаблонов сделан таким образом, что каждая страница рассматривается как завершенная либо при просмотре в автономном режиме, либо при просмотре через фильтр. Например, когда вы пишете страницу как обычно, вы предоставляете текст заголовка (который отображается в строке заголовка большинства браузеров). Если вы используете SiteMesh, ничего не меняется. Во время выполнения фильтр сервлетов считывает текстовое значение заголовка из исходного HTML (который может поступать из динамического источника) и выводит оформленную страницу с тем же текстовым значением заголовка, хотя дизайн страницы будет другим.

В следующем примере показано, как это достигается в шаблоне:

<html>
  <head>...</head>
  <body>
    <div id="top">Header</div>
    <h1><decorator:getProperty property="title" /></h1>
    ...
  </body>
<html>

Нет ничего проще! Тем не менее, решение отделяет автономный вид от украшенного вида. Первому не нужно знать о последнем!

Распространенным вариантом использования является размещение в шаблоне общих объявлений CSS и JavaScript.

Кроме того, выбор декоратора (ов) может исходить из разных стратегий:

  • конфигурационные файлы,
  • печенье,
  • язык браузера,
  • агент отображения (браузер или принтер),
  • и т.п.

Простота и надежность решения — это то, что заставит меня глубоко задуматься об использовании его, если у меня будут простые шаблонные потребности. На противоположном сайте, если у вас есть сложные шаблонные требования, SiteMesh будет недостаточно.

Вы найдете очень простой проект здесь в формате Maven / Eclipse.

Чтобы идти дальше:

  • OpenSymphony : OpenSymphony — недооцененный поставщик компонентов OpenSource, очень похожий на Apache и CodeHause — хотя и в гораздо меньших масштабах, с некоторыми качественными продуктами ( одним из них является Quartz )
  • SiteMesh
  • SiteMesh API
  • Сайт Mesh Taglib

С http://blog.frankel.ch/