Ответ 1
Вероятно, вы захотите изучить Tiles.
РЕДАКТИРОВАТЬ: В отношении примечания к фрагментам вы можете посмотреть Struts. Это не то, что вы ищете (это плитки), но полезно для кого-то из Django.
Исходя из фона в Django, я часто использую "наследование шаблона", где несколько шаблонов наследуются от общей базы. Есть ли простой способ сделать это в JSP? Если нет, есть ли альтернатива JSP, которая делает это (помимо Django on Jython, который есть:)
<html>
<body>
{% block content %}
{% endblock %}
</body>
<html>
{% extends "base template" %}
{% block content %}
<h1>{{ content.title }} <-- Fills in a variable</h1>
{{ content.body }} <-- Fills in another variable
{% endblock %}
Будет выглядеть следующим образом (предполагается, что conten.title - "Вставить заголовок здесь", а content.body - "Вставить тело здесь" )
<html>
<body>
<h1>Insert title Here <-- Fills in a variable</h1>
Insert Body Here <-- Fills in another variable
</body>
<html>
Вероятно, вы захотите изучить Tiles.
РЕДАКТИРОВАТЬ: В отношении примечания к фрагментам вы можете посмотреть Struts. Это не то, что вы ищете (это плитки), но полезно для кого-то из Django.
Вы можете делать похожие вещи, используя файлы тегов JSP. Создайте свой собственный page.tag
, который содержит структуру страницы. Затем используйте тег <jsp:body/>
, чтобы вставить содержимое.
Вы можете использовать быструю структуру для наследования шаблона JSP
base.jsp
%@ taglib uri="http://www.rapid-framework.org.cn/rapid" prefix="rapid" %>
<html>
<head>
<rapid:block name="head">
base_head_content
</rapid:block>
</head>
<body>
<br />
<rapid:block name="content">
base_body_content
</rapid:block>
</body>
</html>
child.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; а именно: разработка быстрых веб-приложений на основе соглашения по конфигурации.
Надеюсь, что не слишком много предложений для одного сообщения.: О)
Мой любимый веб-интерфейс для веб-сайтов Java - Facelets. Он поддерживает большинство Django-подобных шаблонов, которые я видел. Это не так чисто, как Django, но вы получаете одинаковые преимущества наследования.
Вместо Django:
Super:
{% block content %}{% endblock %}
Sub:
{% block content %}inheriting template content here{% endblock %}
Синтаксис Facelet выглядит следующим образом:
Super:
<ui:insert name="content"></ui:insert>
Sub:
<ui:define name="content">inheriting template content here</ui:define>
Механизм шаблона ритма реализовал элегантный подход для наследования шаблонов.
Итак, предположим, что ваш шаблон макета (родительский шаблон) называется 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 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, большая часть контента также применима к чистым ритм-движкам без Play! Framework.