問題:同じ構造の同じページが 2 つhome.jsp
あります。contact.jsp
本文の内容とタイトルのみが異なります。tiles
フレームワークを使用してレイアウト ページを作成し、2 つの のコードを再利用したいと考えていますJSP
。コントローラーのフレームワークはまだ決まっていませSpring MVC 3
んStruts 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
上記のアプローチのどれに固執するべきかについてアドバイスが欲しい.