0

JSP、Velocity、Freemarker などは、いわゆる「内部テンプレート」を提供できるようです。外部テンプレートを記述してから、内部パーツを定義できます。このように(簡略化):

main.jsp:

<html>
<body>
    <div class="container">
        <%@ include file="menu.jsp"%>
        <%@ include file="content.jsp"%>
    </div>
</body>
</html>

したがって、menu.jsp と content.jsp を定義すると、すべて正常に動作します。しかし、ここでアウターブロックはインナーへの参照持っています。私にはあまり適していません。

次のようなものを実装できる Java のテクノロジを探しています。

some_block.jsp:

<template file="main_template.jsp">
<div>
    ... my content here
</div>
</template>

main_template.jsp:

<html>
<body>
    <div class="container">
        <inner_content />
    </div>
</body>
</html>

私はe。逆も同様です -内部ブロックは外部への参照を持っています。JSPで可能ですか?そうでない場合 - Spring MVC で何を使用すればよいですか?

編集:なぜ私にとってより快適なのか:コントローラーがリクエストを受け取ると、どのビューをレンダリングする必要があるかを検出します。たとえば、フィードバック フォームをレンダリングできます。

フィードバック.jsp:

<template file="main_template.jsp">
    <form> ... feedback form content here ... </form>
</template>

または製品ページproduct.jsp :

<template file="main_template.jsp">
    <div> ... product page content here ... </div>
</template>

あらゆる種類のページのページ構造を記述する必要はなく、コンテンツを正しくレンダリングするために外部テンプレートにパラメーターを渡す必要もありません。また、動的コンパイルの必要さえありません。すべてのページは、プリコンパイルされたサーブレットの暗黙的なセットにすぎません。

4

3 に答える 3

0

私は2つの解決策を見つけました - 複雑なものと非常にシンプルでかわいいものです:

最初のものは SiteMesh です: http://wiki.sitemesh.org/

2 つ目は Claudius Hauptmann のカスタム タグです: http://code.google.com/p/jsp-decorator

どちらもうまくいくので、これが他の誰かに役立つことを願っています。

于 2012-11-30T16:02:43.097 に答える
0

これは、JSP TAG ファイルを使用して簡単に実行できます。

最初にテンプレート タグを作成します。

/WEB-INF/tags/template/maintemplate.tag

<%@ tag body-content="scriptless" %>
<html>
<body>
    <div class="container">
        <jsp:doBody/>
    </div>
</body>
</html>

次に、テンプレート タグを使用する JSP ページを作成します。

/some_page.jsp

<%@ page %>
<%@ taglib prefix="template" tagdir="/WEB-INF/tags/template" %>
<template:maintemplate>
    <div>
        ... my content here
    </div>
</template:maintemplate>

JSP ページは maintemplate.tag を使用し、ボディ コンテンツのブロックを渡します。maintemplate.tag は、その本文コンテンツをレンダリングする場所を選択します。

于 2012-12-07T00:03:18.417 に答える
0

あなたが興味を持っているかもしれないJSP taglibを作成しました:

http://www.inamik.com/projects/webframes/

WebFrames taglib を使用してリクエストを実装する方法は次のとおりです。

これはあなたの例との正確な 1 対 1 の相関関係であることに注意してください。ただし、あなたの例とは異なり、WebFrames では無制限のプレースホルダーを作成できるため、動的なタイトル、css-includes、右チャンネルのコンテンツ、左チャンネルのコンテンツなどを含めることができます。ナビなど

フィードバック.jsp

<%@ page language="java" %>
<%@ taglib prefix="wf" uri="/WEB-INF/tld/webframes.tld" %>
<wf:render file="main_template.jsp">
    <wf:section name="inner_content">
        <form> ... feedback form content here ... </form>
    </wf:section>
</wf:render>

製品.jsp

<%@ page language="java" %>
<%@ taglib prefix="wf" uri="/WEB-INF/tld/webframes.tld" %>
<wf:render file="main_template.jsp">
    <wf:section name="inner_content">
        <div> ... product page content here ... </div>
    </wf:section>
</wf:render>

main_template.jsp

<%@ page language="java" %>
<%@ taglib prefix="wf" uri="/WEB-INF/tld/webframes.tld" %>
<html>
<body>
    <div class="container">
        <wf:render section="inner_content" />
    </div>
</body>
</html>

公式 WebFrames の例

以下は、複数のプレースホルダーを作成/入力する方法を示す Web サイトの完全な例セットです。

http://www.inamik.com/projects/webframes/examples/simpleexample.jsp

サンプルのメイン ページのソースを確認することから始めます。

メイン http://www.inamik.com/projects/webframes/examples/simpleexample.jsp.txt

<%@ page language="java" %>
<%@ taglib prefix="wf" uri="/WEB-INF/tld/webframes.tld" %>
<wf:render file="frame.jsp">
    <wf:section name="title">WebFrames Simple Example Page</wf:section>
    <wf:section name="header" file="headersection.html" />
    <wf:section name="footer" file="footersection.html" />
    <wf:section name="body">
        This page is a composite of the following sub-pages.  Click the links below to see
        the jsp/html that makes up each sub-page.
        <UL>
            <LI><A href="simpleexample.jsp.txt">simpleexample.jsp</A></LI>
            <LI><A href="frame.jsp.txt">frame.jsp</A></LI>
            <LI><A href="headersection.html.txt">headersection.html</A></LI>
            <LI><A href="footersection.html.txt">footersection.html</A></LI>
        </UL>       
    </wf:section>
</wf:render>

レイアウトを定義せずにコンテンツ セクションを定義する方法を確認してください。

レイアウト (「frame.jsp」) を見ると、どのコンテンツが表示されるかがわからず、コンテンツのプレースホルダーを作成するだけであることがわかります。

フレーム http://www.inamik.com/projects/webframes/examples/frame.jsp.txt

<%@ page language="java" %>
<%@ taglib prefix="wf" uri="/WEB-INF/tld/webframes.tld" %>
<HTML>
<HEAD><TITLE><wf:render section="title" /></TITLE></HEAD>
<BODY>
    <TABLE width="100%">
        <!-- Header -->
        <TR>
            <TD>
                <TABLE width="100%">
                    <TR>
                        <TD>
                            <wf:render section="header" />
                        </TD>
                    </TR>
                </TABLE>
            </TD>
        </TR>
        <!-- Body -->
        <TR>
            <TD>
                <TABLE width="100%">
                    <TR>
                        <TD>
                            <wf:render section="body" />
                        </TD>
                    </TR>
                </TABLE>
            </TD>
        </TR>
        <!-- Footer -->
        <TR>
            <TD>
                <TABLE width="100%">
                    <TR>
                        <TD>
                            <wf:render section="footer" />
                        </TD>
                    </TR>
                </TABLE>
            </TD>
        </TR>
</BODY>
</HTML>

ヘッダー http://www.inamik.com/projects/webframes/examples/headersection.html.txt

<!--  BEGIN headersection.html -->
<TABLE bgcolor="#00C0C0" width="100%">
    <TR>
        <TD nowrap="nowrap" align="LEFT">
            <H1>WebFrames Sample Header</H1>
        </TD>
    </TR>
</TABLE>
<!-- END headersection.html -->

フッター http://www.inamik.com/projects/webframes/examples/footersection.html.txt

<!--  BEGIN footersection.html -->
<TABLE bgcolor="#00C0C0" width="100%">
    <TR>
        <TD nowrap="nowrap" align="CENTER">
            Copyleft (c) SampleFooter Inc.
        </TD>
    </TR>
</TABLE>
<!-- END footersection.html -->

このパターンは、再利用可能で保守が容易なコンポーネントを作成する、はるかに柔軟なソリューションを提供します。

ノート

これは、David Geary による以前の研究に基づいています。

http://www.javaworld.com/javaworld/jw-12-2001/jw-1228-jsptemplate.html

また、非 JSP ソリューションを希望する (または検討している) 場合は、PHP の Smarty テンプレート エンジンの精神で Java ベースのテンプレート エンジンを作成しました。

https://github.com/iNamik/iNamik-Template-Engine

このエンジン用の 'Frames' taglib もありますが、まだ GitHub にはありません。

于 2012-11-28T23:28:15.990 に答える