3

問題:同じ構造の同じページが 2 つhome.jspあります。contact.jsp本文の内容とタイトルのみが異なります。tilesフレームワークを使用してレイアウト ページを作成し、2 つの のコードを再利用したいと考えていますJSP。コントローラーのフレームワークはまだ決まっていませSpring MVC 3Struts 2

解決策 A:JSPファイル/ビューをコントローラー/アクション クラスから直接呼び出す。

次のように単一の定義を記述しますtiles.xml

<definition name="baseLayout" template="/WEB-INF/jsp/layout/baseLayout.jsp">
    <put-attribute name="title" value="" />
    <put-attribute name="header" value="/WEB-INF/jsp/includes/header.jsp"/>
    <put-attribute name="body" value="" />
</definition>

現在baseLayout.jsp:

<html>
    <head><title><tiles:insertAttribute name="title"/></title></head>
    <body>
        <div class="wrapper">
            <div class="header"><tiles:insertAttribute name="header"/></div>
            <div class="body"><tiles:insertAttribute name="body"/></div>
        </div>
    </body>
</html>

home.jsp

<tiles:insertDefinition name="baseLayout">
    <tiles:putAttribute name="title">
        Title for home page
    </tiles:putAttribute>
    <tiles:putAttribute name="body">
        Content for home page
    </tiles:putAttribute>
</tiles:insertDefinition>

同様にcontact.jsp:

<tiles:insertDefinition name="baseLayout">
    <tiles:putAttribute name="title">
        Title for contact page
    </tiles:putAttribute>
    <tiles:putAttribute name="body">
        Content for contact page
    </tiles:putAttribute>
</tiles:insertDefinition>

ソリューション B:コントローラ/アクション クラスからtiles definition異なるファイルの を呼び出します。JSPこのアプローチでは、作成するファイルtiles definitionごとに1 つ必要です。JSPしたがって、全部で 3 つのタイル定義 (1 つは for でbaseLayout、他の 2 つは forhomeおよびcontact) です。

tiles.xml :

<definition name="baseLayout" template="/WEB-INF/jsp/layout/baseLayout.jsp">
    <put-attribute name="title" value="" />
    <put-attribute name="header" value="/WEB-INF/jsp/includes/header.jsp"/>
    <put-attribute name="body" value="" />
</definition>

<definition name="home" extends="baseLayout">
    <put-attribute name="title" value="Title for home page" />
    <put-attribute name="header" value="/WEB-INF/jsp/home.jsp"/>
</definition>
<definition name="contact" extends="baseLayout">
    <put-attribute name="title" value="Title for contact page" />
    <put-attribute name="header" value="/WEB-INF/jsp/contact.jsp"/>
</definition>

baseLayout.jsp :Same as **Solution A**

home.jsp :Content for home page

contact.jsp:Content for contact page


上記のアプローチのどれに固執するべきかについてアドバイスが欲しい.

4

3 に答える 3

3

2 番目の解決策が最善の方法です。

  • 各レイアウトのtilesプロパティに 独立したセクションを含めることができます。jsp
  • 後で他のレイアウトに影響を与えることなく、いつでも変更できます
  • で使用する最も伝統的な方法struts

最初の解決策:

  • 特に高度なレベルのプロジェクトに深く関わっている場合、変更を加えて編集する必要があるため、後で問題が発生する可能性があります
  • ストラット/タイルのアーキテクチャ設計には適していない、より一般的なアプローチ
于 2012-07-13T06:36:46.340 に答える
1

ソリューション B は、実装するための最良のアプローチです。

  • ソリューション A のように jsp のコードを台無しにすることなく、後で他の jsp に必要な場合に再利用できる個別のスタイル テンプレートが作成されます。

  • 理解したところでは、2 番目のアプローチがより明確であり、従うべき共通の標準です。

于 2012-07-13T11:30:25.160 に答える
0

ソリューション A は、構成を配布し、明示的な構成よりも名前規則を促進することで、大規模なアプリケーションのメンテナンスを支援します。さらに、JSF やプレーン タグなどの他のテンプレート ソリューションと概念的に互換性があります。たとえば、次を参照してください:テンプレートを簡単に作成するための JSP トリック?

長期間にわたってさまざまな人々によって書かれた何百ものコントローラーとビューを含むアプリケーションを考えてみてください。ソリューション B では、巨大な tiles.xml ファイルに直面する必要があります。規律のわずかな欠如を追加すると、ビュー名が一貫性のない混乱になり、構成内にコンテンツが存在します(例のように)。

于 2014-05-01T07:21:21.023 に答える