- 20.1. メニューの作成
- 20.2. メニューの改良
- 20.3. 文字列・Tileのリスト
20.3. 文字列・Tileのリスト
1節ではリンクのリストを作成しました。ここでは文字列・Tileのリストを作成して、それらを表示する方法について説明します。
Tiles設定ファイルで文字列のリストを作成するためには、<add>タグを使用します。
<definition ...> <putList name="textList"> <add value="こんにちは" /> <add value="さようなら" /> <add><![CDATA[<img src="http://www.techscore.com/common/img/logo.gif">]]></add> </putList> </definition>
value属性か、<add>タグのコンテンツに文字列を指定します。コンテンツで文字列を指定する場合には、必要に応じてCDATAセクションを使用するようにして下さい。例では<img>タグを指定しているので、CDATAセクションを使用しています。
続いてJSPページで設定したリストを表示します。
... <tiles:importAttribute name="textList" /> <logic:iterate id="text" name="textList" type="java.lang.String"> <bean:write name="text" filter="false" /><br> </logic:iterate> ...
リンクの場合と方法は同じです。<tiles:importAttribute>タグで文字列のリストをpageスコープに読み込み、<logic:iterate>タグと<bean:write>タグを用いて、1つ1つの文字列を出力しています。<bean:write>タグはデフォルトでは「<」などの特殊文字をエンティティに置き換えて出力するため、置き換えずに出力するよう「filter」属性で「false」を指定します。このJSPページを表示させると、文字列と画像とが縦に並んで表示されます。
続いてTileのリストを作成する方法について説明します。Tileのリストを作成する場合にも、<add>タグを使用しますが、こちらの場合には「type」属性を指定します。
<definition ...> <putList name="pageList"> <add value="/WEB-INF/jsp/header.html" type="page" /> <add value="/WEB-INF/jsp/menu.jsp" type="page" /> <add value="/WEB-INF/jsp/footer.html" type="page" /> </putList> <putList name="definitionList"> <add value="textList" type="definition" /> <add value="calendar" type="definition" /> </putList> </definition>
「type」属性に「page」(または「template」)を指定した場合には、value属性の値はリソースへのパスとみなされ、「definition」を指定した場合には、他の組み合わせの名前とみなされます。これをJSPページで表示させるには、以下のようにします。
... <tiles:importAttribute name="pageList" /> <logic:iterate id="pageItem" name="pageList" type="java.lang.String"> <tiles:insert beanName="pageItem" flush="false" /> </logic:iterate> <tiles:importAttribute name="definitionList" /> <logic:iterate id="definition" name="definitionList" type="java.lang.String"> <tiles:insert beanName="definition" flush="false" /> </logic:iterate> ...
<tiles:importAttribute>と<logic:iterate>を使用するところまでは変わりません。リストからページのパスや組み合わせ名を読み込み、それをincludeするには<tiles:insert>タグを使用します。前節と同じです。なお繰り返しincludeを実行している場合、途中でフラッシュが行われるとエラーが発生しますので、「flush」属性に「false」を指定して下さい。
実は、Tiles設定ファイルでtype属性を指定しなくても、<tiles:insert>タグは正しく実行されます。目安程度のものだと考えて下さい。
(実習課題3)
実習課題2で作成したWebアプリケーションを改良しなさい。
- ページのタイトルを、リンク名と異なる文字列にすること。
- タイトルの指定は、Tiles設定ファイルで行うこと。