2

これは漠然とした壮大な質問ですが、できる限り具体的な例を挙げて説明できれば幸いです。

最近、アプリケーション フレームワークを Spring MVC に切り替えましたが、開発中に 1 つ (実際には 1 つだけ) の制限要因が見つかりました。それは、動的ビューを適切なモデルに含める方法です。

たとえば、再利用可能なフラグメントを含むページを作成しています。左側には「ランダム q と a」フラグメントがあり、上部には共通の「ナビゲーション」フラグメントがあります。

これらの各フラグメントには、異なるモデルが必要です。私は、「ナビゲーション」部分を作成している開発者に、「q and a」モデル、コントローラー、およびロジックとは完全に分離されたナビゲーション モデル、コントローラー、およびビューを作成するように指示してきました。これは、別のページ レイアウトで「ナビゲーション」が必要で、「q と a」またはその逆が必要ない場合に、再利用性を促進するためです。

私がこれでどこに行くのか分かりますか?「ホーム」ページには両方のフラグメントが含まれていますが、フラグメントが必要とするコントローラー/モデル/ビューを「認識」する必要がないのは良いことです。

私は開発者にSpring MVCを次のように使用するように指示してきました....

home.jsp の例:

<body>
    <div class="top">
        <jsp:include page="/navigation"/>
    </div>
    <div class="left">
        <jsp:include page="/randomgQuestion"/>
    </div>
</html>

アイデアは、要求時に、必要な他のフラグメントが必要なモデルで動的に取り込まれるというものです。

これは良い考えですか?より良い方法はありますか?

どんな議論でも歓迎ですが、建設的にお願いします。

目標は、再利用性とダム ビューです。

リクエストに応じて、更新や説明を提供します。ありがとうございました。

4

2 に答える 2

4

あなたが説明していることは、ポータル/ポートレット機能 (JSR-286) => つまり、他の組み込みアプリケーション (ポートレット) によって生成されたコンテンツで構成される Web ページを生成するアプリケーション (ポータル) のように感じます。ポータルはINCLUDE ディスパッチ( と同等<jsp:include>) を使用して、JSR-286 機能を提供しています。したがって、この観点から、<jsp:include>再利用可能なコンテンツ ブロックを提供するために を使用することをお勧めします。それぞれに独自の MVC ライフサイクルがあります (ただし、同じ要求属性の名前空間を共有します)。

また、JSP 間で再利用したい単純なフラグメントしかない場合は、単純なフラグメント<%@include file="menu.jspf" %>の方が適している可能性があることに注意してください。

また、JSP タグ機能について言及する必要があると思います... 再利用可能なコンテンツを JSP TAG ファイル ( /WEB-INF/tags/[taglib-folder/]*.tag) として作成すると、高度なレイアウト機能を提供できます。さらに高度な機能については、Java ベースのタグ ライブラリを実装できます。


1 つのプロジェクトでカスタム TAG と include ディレクティブを使用する方法を説明するために、以下に 1 つの JSP ビューを示します。

<%@ include file="/WEB-INF/taglib.jspf" %>
<layout:admin section="test">
    <layout:admin-context />
    <layout:admin-content>
        <h1><spring:message code="test.overview.heading" /></h1>
        <h2><spring:message code="test.detail.heading" /></h2>
        <%@ include file="test-detail.jspf" %>
    </layout:admin-content>
</layout:admin>

INCLUDE ディスパッチ (つまり<jsp:include />) が必要になるユースケースはありませんでした。

于 2014-05-13T10:19:20.633 に答える
2

UI に関して言えば、Apache Tiles と Sitemesh は、こ​​こで確認したいものです。

コントローラー層に関しては、Spring には @ControllerAdvice アノテーションがあり、これを使用してすべてのコントローラーのスコープ内にモデル属性を配置できます。たとえば、ナビゲーション モデルを @ControllerAdvice に配置した場合、他のコントローラーはそれをモデル属性として設定することを心配する必要はありません。

http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/mvc.html

@ModelAttribute メソッドは @ControllerAdvice アノテーション付きクラスでも定義でき、そのようなメソッドはすべてのコントローラーに適用されます。@ControllerAdvice アノテーションは、クラスパス スキャンによって実装クラスを自動検出できるようにするコンポーネント アノテーションです。

于 2014-05-12T21:38:13.627 に答える