tilesの検証2
SAStrutsでtilesを検証中。
1ページごとに、レイアウトに部品を組み込むJSPを画面ごとに作らなければいけないのがちょっと大変。
たとえば、以下のようにレイアウトを以下のように定義しておきます。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title><tiles:getAsString name="title" /></title> <tiles:insert page="head.jsp" /> </head> <body> <div align="center"> <table width="100%"> <tr> <td><tiles:insert page="header.jsp" /></td> </tr> <html:errors/> <tr> <td><tiles:insert attribute="content" /></td> </tr> </table> </div> </body> </html>
これを、testLayout.jspとします。
この状態で、実際に使用するには以下のように記述します。testContent.jspは画面の主な内容となる。このファイルを別に用意する必要があります。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <tiles:insert template="/WEB-INF/page/tiles/testLayout.jsp" flush="true"> <tiles:put name="title" value="テストページ"/> <tiles:put name="content" value="/WEB-INF/page/test/test/testContent.jsp" /> </tiles:insert>
この方法だと、上記の例だと、test.jspとtestContent.jspみたいなファイルを画面ごとに2つ用意しないといけません。
jsp:attributeタグを使えば、ファイルを分けずに1つのファイルで記述できます。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <tiles:insert template="/WEB-INF/page/tiles/testLayout.jsp" flush="true"> <tiles:put name="title" value="テストページ"/> <tiles:put name="content" type="string"> <jsp:attribute name="value"> <h1>ヘッダ</h1> <table border="1"> <tr><td>これは、インクルードしてみた場合だよ。</td></tr> </table> <s:form> <html:text property="hoge" size="20" /> </s:form> </jsp:attribute> </tiles:put> </tiles:insert>
まあ、value属性に記述してもいいのですがそれはあまりにも大変だと思いますので。
ちなみに、
http://lab.moyo.biz/recipes/java/jsp/jsp-attribute.xsp
この辺が詳しいです。
ファイル中に直接書かずに、別ファイルにすることで、似たような画面の共通化はもちろんできるので、どちらかだけが有効というわけではありません。