Spring 3 + tiles 2アプリにコンテキスト情報(現在のメニューやページのタイトルなど)を追加するための最良の方法は何でしょうか。
システムをできるだけ簡単に拡張できるようにしたいので、たとえば、新しいリクエストハンドラごとに新しいエントリを書きたくないので、タイル設定ではワイルドカードを使用します。
<tiles-definitions>
<definition name="baseLayout" template="/WEB-INF/jsp/layout.jsp">
<put-attribute name="title" value="Template" />
<put-attribute name="header" value="/WEB-INF/jsp/header.jsp" />
<put-attribute name="menu" value="/WEB-INF/jsp/menu.jsp" />
<put-attribute name="body" value="/WEB-INF/jsp/content.jsp" />
<put-attribute name="footer" value="/WEB-INF/jsp/footer.jsp" />
</definition>
<definition name="**-tile" extends="baseLayout">
<put-attribute name="title" value="{1}" />
<put-attribute name="body" value="/WEB-INF/jsp/{1}.jsp" />
</definition>
</tiles-definitions>
ですから、残っている唯一の選択肢は、モデルに何かを追加することだと思います。もちろん、次のように、すべてのリクエストハンドラに新しいモデルエントリ(例:MODEL_ID)を追加することもできます。
@RequestMapping(value="/order/{orderId}.x")
public String showOrder(ModelMap model, @PathVariable long orderId) {
// do stuff
model.addAttribute(Context.MODEL_ID, Context.getOrderContext());
}
次に、この特定のMODEL_IDは、title.jspで解釈されてタイトルが表示され、menu.jspで解釈されて現在のメニュー項目が強調表示されます。
ただし、これらの行をすべてのコントローラーのすべての要求メソッドに追加するというアイデアは好きではありません。
ビューまたはリクエストパスの名前に基づいて「コンテキスト」を決定しようとするインターセプターを作成することを考えていましたが、インターセプター内のすべてのURLを書き換えて、コントローラーとの同期を維持する必要があります。
一般的なタイルで使用するすべてのコントローラーにコンテキスト情報を追加するための正しいまたは最も簡単な方法は何ですか?