Исходя из опыта работы с Django, я часто использую "наследование шаблонов", когда несколько шаблонов наследуются от общей базы. Есть ли простой способ сделать это в JSP? Если нет, есть ли альтернатива JSP, которая делает это (помимо Django на Jython, который есть :)
РЕДАКТИРОВАТЬ: В связи с примечанием к плиткам вы можете изучить Struts. Это не то, что вы ищете (это плитки), но это полезно для тех, кто работает с Django.
Ответ 2 · рейтинг 20 · Ben Lings
Вы можете делать аналогичные вещи, используя файлы тегов JSP. Создайте свой собственный page.tag, содержащий структуру страницы. Затем используйте тег <jsp:body/> для вставки содержимого.
Ответ 3 · рейтинг 12 · badqiu
Вы можете использовать быстрый фреймворк для наследования шаблонов JSP
<%@ taglib uri="http://www.rapid-framework.org.cn/rapid" prefix="rapid" %>
<rapid:override name="content">
<div>
<h2>Entry one</h2>
<p>This is my first entry.</p>
</div>
</rapid:override>
<!-- extends from base.jsp or <jsp:include page="base.jsp"> -->
<%@ include file="base.jsp" %>
вывод
<html>
<head>
base_head_content
</head>
<body>
<br />
<div>
<h2>Entry one</h2>
<p>This is my first entry.</p>
</div>
</body>
</html>
Другие варианты, которые стоит изучить, включают Sitemesh, который основан на идее декораторов страниц, и Java Server Faces (JSF), в котором используются веб-компоненты пользовательского интерфейса. И пока мы говорим о быстрой разработке с использованием веб-фреймворков на платформе Java, я рекомендую вам попробовать Grails. У него та же миссия, что и у Django; а именно, быстрая разработка веб-приложений, основанная на соглашении, а не конфигурации.
Надеюсь, предложений для одного поста не так уж и много. : o)
Ответ 5 · рейтинг 3 · jaketrent
Моя любимая технология веб-интерфейса Java - Facelets. Он поддерживает самые Django-подобные шаблоны, которые я когда-либо видел. Он не такой чистый, как Django, но вы получаете те же преимущества наследования.
Итак, предположим, что ваш шаблон макета (родительский шаблон) называется main.html:
<h1>@get("title", "default main page")</h1>
<div id="left-panel">@render("leftPanel")<div>
<div id="right-panel">@render("rightPanel")</div>
<div id="main-content">@render()</div>
<div id="footer">
@render("footer"){
@**
* the content here is supplied if the child template failed
* to provide it's own footer implementation
*@
<div class="footer">copyright 2012 ...</div>
}
</div>
А вот и ваш целевой шаблон:
@extends(main)
@set(title: "My Cool Page")
@section("leftPanel") {
<ul class="menu">
...
</ul>
}
@section("rightPanel") {
<div class="news">
...
</div>
}
@*** note no "footer" section supplied so the default content will be used **@
@*** the rest is for the main content **@
...
Проверьте реальную демонстрацию на http://rythmengine.com/demo/testdefaultlayoutcontent
Подробный документ можно найти по адресу http://www.playframework.org/modules/rythm. Хотя он нацелен на Play! Framework, большая часть контента также применима к чистому движку rythm без Play! Framework.