Springの勉強を始めたばかりで、Webアプリを作ろうとしています。フッター、ヘッダー、サイドバーなどの一般的な UI 要素がいくつかあり、動的ブロック、つまりウィジェットも追加したいと考えています。含めるウィジェットは、JSP テンプレートではなく、Java コードで選択する必要があります。
そして、それが私が立ち往生しているところです。すべてのコントローラーは独自のビューを返しますmain.jsp
。これには、いくつかの静的ブロックと動的ブロックが含まれます。
<jsp:include page="head.jsp" />
<c:forEach items="${viewList}" var="viewName">
<jsp:include page="${viewName}.jsp" />
</c:forEach>
...
コントローラーでは、ウィジェットとして使用されるビュー リストとオブジェクトをモデルに渡します。
...
views.add(moduleOne.getViewName());
views.add(moduleTwo.getViewName());
model.addAllAttributes(moduleOne.getAttr());
model.addAllAttributes(moduleTwo.getAttr());
model.addAttribute(IModule.VIEW_LIST, views); // passing all views that will be included into main.jsp
...
return "main";
しかし、jsp:include page
モデルパラメータを使用するとインクルードに渡されないため、機能しません。また%@include file=
、その場合、変数を使用できず、コンパイル時に渡すビューを知る必要があるため、できません。
もちろん、解決策がない場合は、可能なすべてのウィジェット ビューをハードコーディングしてmain.jsp
、それらを切り替える必要があります。
switch($i) {
case 1:
include file=widget1.jsp;
break;
case 2:
include file=widget2.jsp;
break;
...
}
これは明らかに柔軟ではありません。
したがって、質問は次のとおりです。
%@include file=
使用せずにモデルを渡してビューを含め、ウィジェットを機能させる問題を解決する方法はあります か?- そのようなウィジェット構造を実装するためのより良い方法はありますか?
ありがとうございました!