web-dev-qa-db-ja.com

JSPテンプレートの継承

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>
31
Ryan

Tiles を調べてみてください。

編集:タイルに関連するメモで、 Struts を調べたいと思うかもしれません。それはあなたが探しているものではありませんが(それはタイルです)、Djangoから来た人にとっては便利です。

10
geowa4

JSPタグファイルを使用して同様のことを行うことができます。ページ構造を含む独自のpage.tagを作成します。次に、<jsp:body/>タグを使用してコンテンツを挿入します。

19
Ben Lings

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>

ソースコード

http://rapid-framework.googlecode.com/svn/trunk/rapid-framework/src/rapid_framework_common/cn/org/rapid_framework/web/tags/

12
badqiu

検討する価値のある他のオプションには、ページデコレータのアイデアに基づいて構築された Sitemesh 、およびWebベースのUIコンポーネントを採用する Java Server Faces (JSF)があります。そして、JavaプラットフォームでのWebフレームワークを使用した高速開発について話している間、 Grails をチェックすることをお勧めします。Djangoと同じ使命があります。つまり、 、設定より規約に基づく迅速なWebアプリ開発。

1つの投稿に対してあまり多くの提案がないことを願っています。 :o)

4
yawmark

私のお気に入りの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>
3
jaketrent

リズムテンプレートエンジン テンプレート継承のためのエレガントなアプローチを実装しました。

したがって、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のない純粋なリズムエンジンにも適用されます。

1
Gelin Luo