コンピュータクワガタ

かっぱのかっぱによるコンピュータ関連のサイトです

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
この辺が詳しいです。
ファイル中に直接書かずに、別ファイルにすることで、似たような画面の共通化はもちろんできるので、どちらかだけが有効というわけではありません。
を使わなくても、普通にタグで囲めばvalue属性に記述したものと同じになります。