putListでメニューの作成

menu.jspに一つずつリンクを足していくのって、めんどくさいです。 しかも、同じコードの繰り返しがたくさんできるので無駄も多いです。 Tileにはそんな無駄を解決するべくputListなるものが用意されています。
まず、ベースのdefinitionです:





<put name="menu" value="site.menu.bar" />




leftMenuは今日のところはおいといて…、menuに注目します。 他のvalueの値がJSPファイルやStringなのに対し、valueに別のdefinitionの名前を指定しています。 そのdefinitionでputListを使いメニューのアイテムを一つずつ定義します。

<definition name="site.menu.bar" path="/WEB-INF/tiles/menu.jsp" >

<item value="ホーム"
link="welcome"
classtype="org.apache.struts.tiles.beans.SimpleMenuItem" />
<item value="メニュー1"
link="/menu1.do"
classtype="org.apache.struts.tiles.beans.SimpleMenuItem" />
<item value="メニュー2"
link="/menu2.do"
classtype="org.apache.struts.tiles.beans.SimpleMenuItem" />
<item value="メニュー3"
link="/menu3.do"
classtype="org.apache.struts.tiles.beans.SimpleMenuItem" />
<item value="会社概要"
link="company"
classtype="org.apache.struts.tiles.beans.SimpleMenuItem" />


putListエレメントでアイテムとそのリンクのリストを作ることができます。 上の例では、tileスコープにitemsという名前のリスト(java.util.List)を作ります。
menu.jspではタグを使います。

<%@ include file="/WEB-INF/taglibs.jsp" %> →ここを参照
<%@ page contentType="text/html; charset=EUC-JP"%>

<ul>

<li>



→"/"で始まるリンク(アクション)




→global-forwardで定義されているアクション


</li>

</ul>

tiles:importAttributeタグはアトリビュートをtileスコープからページスコープ*1にインポートします。

*1:ディフォルトはページスコープ。 他のスコープを指定することもできる。