Java HTML View Engine с главными шаблонами и вспомогательными представлениями

Я отчаянно ищу механизм просмотра Java HTML, который удовлетворяет трем основным требованиям:

  1. Поддержка основных страниц шаблонов.
  2. Шаблоны HTML можно использовать в качестве подпредставлений внутри других шаблонов.
  3. Шаблоны HTML не обязательно должны поддерживаться файлами конфигурации или классами Java.

Это для веб-приложения Java, которое в основном состоит из страницы только для чтения и нескольких страниц с формами. Скорее всего, я буду использовать его в сочетании с MVC-фреймворком.

Главные шаблоны страниц

Основная структура HTML должна определяться главной HTML-страницей. Различные страницы просто предоставляют основное содержимое, которое помещается на главную страницу для создания окончательной страницы. Это больше, чем просто включение верхнего и нижнего колонтитула.

Подпредставления

Страница должна иметь возможность использовать другие HTML-страницы/шаблоны в качестве подпредставлений в своем собственном контенте. Он должен иметь возможность передавать по крайней мере один параметр для предоставления данных, которые должны отображаться в подпредставлении. Кроме того, должна быть возможность рекурсивно использовать дополнительные подвиды внутри подвида. Опять же, это выходит за рамки простого механизма include.

Без поддержки

Шаблоны HTML должны состоять из одного файла, который в основном представляет собой страницу HTML или XML, где определенные части будут заменены на основе предоставленных данных. Им не нужны дополнительные (для каждого шаблона) файлы конфигурации. И у них не должно быть необходимости реализовывать какие-либо классы Java для поддержки.

Я уже ознакомился со многими механизмами шаблонов Java. Но ни один из них не отвечает этим требованиям. (Однако в мире .NET ASP.NET MVC с механизмом представления Razor идеально подойдет.)

Обновление:

До сих пор я рассматривал следующие движки (пожалуйста, дайте мне знать, если я упустил из виду способ достижения моих требований с одним из этих движков):

  • JSP: имеет очень простой механизм включения без основных шаблонов или надлежащей области видимости для подпредставлений и т. д.
  • Скорость: имеет немного усовершенствованный механизм включения, но не содержит эталонных страниц.
  • FreeMarker: механизм включения, без мастер-страниц.
  • Гобелен: хорошие подпредставления на основе компонентов, а также механизм шаблонов. Тем не менее, не представляется возможным легко использовать часть механизма шаблонов без остальной части фреймворка, который слишком ориентирован на страницы, чтобы его можно было комбинировать с фреймворком MVC.
  • Плитки: требуется две страницы JSP на последнюю страницу. Два слоя (плитки и jsp) делают его слишком сложным, особенно для подвидов.

Обновление (2): я изменил некоторые термины: движок представления вместо механизм шаблонов, подпредставления вместо компоненты.


person Codo    schedule 31.12.2011    source источник
comment
Было бы проще, если бы вы указали, какие движки (какие, многие или ни одного?) вы смотрели, и почему они не соответствуют вашим требованиям, чтобы избежать канонических предложений.   -  person Dave Newton    schedule 31.12.2011
comment
Я думаю, плитка должна удовлетворить ваши потребности.   -  person JB Nizet    schedule 31.12.2011
comment
На самом деле JSP позволяет создавать шаблоны наполовину прилично, но область видимости может быть проблемой. И Velocity, и FreeMarker позволяют создавать шаблоны с помощью включений. Плитки, особенно последние версии, более чем удовлетворяют требованиям, хотя и настраиваются через XML (хотя могут быть доступны и другие механизмы конфигурации). SiteMesh немного отличается и может быть не тем, что вы ищете. Я думаю, что Mustache и MVEL уже не работают, но, возможно, на них стоит обратить внимание.   -  person Dave Newton    schedule 31.12.2011
comment
@DaveNewton: Спасибо за краткий анализ. Я посмотрел Tiles, и мне это не нравится (см. обновление к моему вопросу).   -  person Codo    schedule 01.01.2012


Ответы (1)


Вы действительно не смотрели на шаблонизаторы. JSP, Velocity и FreeMarker не являются шаблонизаторами (в вашем понимании шаблонизатора). Это языки, позволяющие динамически генерировать разметку и получать данные для отображения в сгенерированном HTML из объектов Java. Tapestry — это полная структура веб-приложений, основанная на компонентах.

Если вы используете JSP для создания HTML-страниц, вы можете использовать механизм шаблонов поверх JSP, такой как Tiles или SIteMesh, который будет обрабатывать шаблоны и, таким образом, позволит иметь один JSP для каждого «компонента» полной страницы. Как правило, JSP не следует использовать без веб-фреймворка MVC, такого как Stripes, Spring MVC или Struts2. Все они либо имеют собственную поддержку шаблонов, либо поддерживают интеграцию других, таких как SiteMesh или Tiles.

person JB Nizet    schedule 31.12.2011
comment
Я согласен с тем, что термин «механизм шаблонов» может быть не лучшим для описания JSP, Velocity и т. д. Я просмотрел Tiles и не уверен, правильно ли понимаю, как он работает. Кажется, это дополнительный слой, из которого состоят части страницы. Это нормально для эталонных страниц. Однако, похоже, он не предоставляет компоненты. Или как было бы возможно создать таблицу HTML с каким-то циклом for на странице JSP, а затем включить другую страницу JSP для заполнения ячейки таблицы в каждой строке? Как плитка может помочь здесь? - person Codo; 31.12.2011
comment
Плитки могут быть вложены в другие плитки. См. tiles.apache.org/framework/tutorial/advanced/. Однако, чтобы сделать то, что вы только что описали, достаточно простого включения или использования файла тега JSP. Но плитка также позволит это, если вы хотите. - person JB Nizet; 31.12.2011
comment
Я видел эту страницу о вложении. Но, похоже, это работает только для фиксированной структуры, а не для таблицы с переменным количеством строк. Или я не правильно понял концепцию тайлов? - person Codo; 31.12.2011
comment
Вы можете зацикливаться с тегами JSP и на каждой итерации вставлять один (или несколько) атрибутов вашего определения плитки. Определения плиток сообщают, какую страницу макета использовать и что включать в каждый заполнитель макета. Зацикливание не выполняется с помощью плиток. Это делается с помощью тегов JSP. - person JB Nizet; 31.12.2011
comment
Спасибо, я попробую, хотя использование компонентов кажется таким простым и элегантным, как хотелось бы. - person Codo; 31.12.2011
comment
Если вы хотите использовать компоненты, выберите фреймворк на основе компонентов, такой как Wicket, JSF или Tapestry. Но сначала убедитесь, что вы понимаете, что означают компоненты. - person JB Nizet; 31.12.2011
comment
Компонент, наверное, не лучшее слово. Я обновил свой вопрос, чтобы использовать термин subview. Затем я внимательно изучил плитки, но нашел их слишком сложными: вам нужно создать две jsp-страницы для каждой последней страницы только для того, чтобы использовать мастер-шаблоны. И использовать другую страницу jsp в качестве подпредставления тоже непросто. - person Codo; 01.01.2012
comment
Определения плиток обычно задаются в XML-файле, и у вас есть только один JSP для макета, один JSP для каждой части и XML-файл, в котором собраны конечные страницы. Нет необходимости в 2 страницах JSP на последнюю страницу. - person JB Nizet; 01.01.2012