Djangoのバックグラウンドから来て、私はよく「テンプレート継承」を使用します。この場合、複数のテンプレートが共通のベースから継承します。 JSPでこれを行う簡単な方法はありますか?そうでない場合、これを行うJSPの代替手段はありますか(JythonのDjangoは:)以外に)
<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>
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 、およびWebベースのUIコンポーネントを採用する Java Server Faces (JSF)があります。そして、JavaプラットフォームでのWebフレームワークを使用した高速開発について話している間、 Grails をチェックすることをお勧めします。Djangoと同じ使命があります。つまり、 、設定より規約に基づく迅速なWebアプリ開発。
1つの投稿に対してあまり多くの提案がないことを願っています。 :o)
私のお気に入りのJava Webフロントエンド技術はFaceletsです。これは私が見た中で最もDjangoのようなテンプレートをサポートします。Djangoほどきれいではありませんが、同じ継承の利点があります。
Djangoの代わりに:
素晴らしい:
{% block content %}{% endblock %}
サブ:
{% block content %}inheriting template's content here{% endblock %}
Faceletの構文は次のようになります:
素晴らしい:
<ui:insert name="content"></ui:insert>
サブ:
<ui:define name="content">inheriting template's 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'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を対象としていますが、ほとんどのコンテンツはPlay!Frameworkのない純粋なリズムエンジンにも適用されます。