Я разрабатываю проект на основе Java-сервлета, и я новичок в этой платформе. Я обычно использую Django, у которого есть отличный механизм шаблонов по умолчанию. Есть ли что-то подобное для Java?
PS: наследование шаблонов является обязательным (во избежание повторения). Есть несколько библиотек, таких как усы, которые не предоставляют эту функцию.
Rythm Template Engine должен быть именно тем, что вам нужно. Не уверен, почему вы сказали, что документ не на должном уровне.
Посетите http://rythmengine.org/doc/template_guide.md#inheritance и поэкспериментируйте с функцией наследования на http://fiddle.rythmengine.org/#/editor/886606b3a7034088b991855bef8f89da .
Отказ от ответственности : я автор Rythm
Сначала вы можете прочитать статью This SO , в которой рассказывается о существующих шаблонизаторах и о том, почему какой из них использовать, это должно помочь вам начать работу.
Я лично использовал фреймворк плитки и остался очень доволен. Вы пишете свои фрагменты и у вас есть шаблон для объединения частей (верхний и нижний колонтитулы, навигация и т. д.) всегда одинаковым образом.
Различные плитки представляют собой обычные файлы JSP, и поэтому интеграция проста, если вы привыкли к JSP (которой вы скоро станете, если будете работать с Java, сервлетами и JSP).
Я должен заметить, что мой опыт с этим немного запылился :) Я не писал код для Интернета годами.
Chunk Templates обеспечивает поддержку такого типа вещей {% exec %}
следующим образом:
base_template.chtml
<html>
<head>
</head>
<body>
{$body}
</body>
</html>
widget_detail.chtml
{% exec base_template %}
{$body=}
...
{=}
{% endexec %}
Вот более интересный пример, в котором базовый шаблон предоставляет некоторые значения по умолчанию, которые вы можете переопределить из сервлета или в exec:
base_template2.chtml
<html>
<head>
<title>{$page_title:Widget Emporium}</title>
</head>
<body>
{$top_nav:.include top_nav}
{$left_nav:.include left_nav}
{$body}
{$footer:.include footer}
</body>
</html>
top_nav.chtml
<div class="top_nav">
...
</div>
left_nav.chtml
<div class="left_nav">
...
<div>
нижний колонтитул.chtml
<div class="footer">
...
<div>
special_page.chtml — отключить всю навигацию и использовать альтернативный нижний колонтитул
{% exec base_template2 %}
{$body=}
...
{=}
{$page_title = Special Page}
{$top_nav=}{=}
{$left_nav=}{=}
{$footer=}{% include special_footer %}{=}
{% endexec %}
exec также поддерживает json и xml для назначения значений тегов .
Для более простых вещей синтаксис Chunk очень похож на Django/jinja2. Аналогично применяются фильтры с трубами: {$tag|filter}
и тэги Chunk пишутся как {$tag}
или {% $tag %}
скорее чем, {{ tag }}
но к этому довольно быстро привыкаешь.
В частности, ветвление if-else должно выглядеть очень знакомым для всех, кто работает с Django:
{% if (...) %}
true-case
{% else %}
false-case
{% endif %}
Отказ от ответственности: я являюсь автором/мейнтейнером Chunk. Проект с открытым исходным кодом и на GitHub.
Боб Далглиш
Ранвир
base.html
. файлы, говорите вы{{block body}}
. Затем в другом файле, скажемlogin.html
, если вы используете наследование шаблонов, вам нужно только сказать,{extends base.html}
а затем{{start bodyblock}} Your new content {{end bodyblock}}
. Это отобразит как статический, так и динамический контент. Вы можете вызвать любой файл из другого файла.Ранвир
Боб Далглиш
Ранвир
Боб Далглиш