20. メニューの作成
- 20.1. メニューの作成
- 20.2. メニューの改良
- 20.3. 文字列・Tileのリスト
20.1. メニューの作成
メニューとして、ホームページ内の各コンテンツへのリンクがまとめられているのはよくある事です。このメニューを静的に用意すれば問題ないのですが、ここではTiles設定ファイルとJSPページを利用して、メニューを作成する方法について説明します。
メニュー内にあるリンクの数は、決まった数とは限りません。決まっている場合には<tiles:getAsString>タグとTiles設定ファイルの<put>タグで十分ですが、これらでは可変個のリンクには対応できません。このように可変個の値を置き換えたい場合には、<putList>タグを用います。
<putList>タグはjava.util.Listを作成し、Tilesの組み合わせに与えるものです。<putList>タグも<definition>の内側で使用し、「name」属性でリストの名前を指定します。<putList>と<put>タグの順番に制約はなく、混在した順番になっても構いません。
<definition name="main" path="/WEB-INF/jsp/layout.jsp"> ... <putList name="menuList"> <item value="トップページ" link="/index.html" /> <item value="アドレス帳" link="/address.jsp" /> <item value="スケジュール帳" link="/schedule.jsp" /> </putList> </definition>
<putList>タグの内側に設定できるタグには何種類かあるのですが、リンクのリストを作成したい場合には<item>タグを使用します。<item>タグは「org.apache.struts.tiles.beans.SimpleMenuItem」に対応したもので、SimpleMenuItemのインスタンスを作成し、リストに追加します。<item>タグの属性「value」「link」「tooltip」「icon」は、それぞれSimpleMenuItemの同名のプロパティに対応しています。
続いてJSPページでメニューを表示する方法について説明します。layout.jspのメニュー部分を変更します。
<%@ page contentType="text/html; charset=EUC-JP" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-tiles" prefix="tiles" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %> ... <!-- メニュー部分 --> <td><tiles:importAttribute name="menuList" /> <logic:iterate id="menu" name="menuList" type="org.apache.struts.tiles.beans.SimpleMenuItem"> <bean:define id="link" name="menu" property="link" type="java.lang.String" /> <html:link page="<%=link %>"><bean:write name="menu" property="value" /></html:link> </logic:iterate> </td> ...
Tiles設定ファイルで作成したリストを使用するためには、まず<tiles:importAttribute>タグを実行する必要があります。<tiles:importAttribute>は「name」属性で指定したコンポーネントを、pageスコープに読み込みます。Tiles設定ファイルの<put>タグで作成した文字列を読み込む事も可能です。「name」属性を省略した場合には、全てのコンポーネントをpageスコープに読み込みます。
後はこれまで通りにします。サンプルでは<logic:iterate>で、SimpleMenuItemオブジェクトを1つずつ取り出し、<html:link>と<bean:write>で出力を行っています。このプログラムを実行すると、Tiles設定ファイルで指定したリンクが、縦に並んで表示されます。
(実習課題1)
以下のWebアプリケーションを、Tilesを用いて作成しなさい。
- 以下のレイアウトで表示すること
メニュー コンテンツ - コンテンツ部分に表示するTileは、「現在の月のカレンダーを表示するもの」「世界各地の現在時刻を表示するもの」「天気予報(予報内容についてはランダムで良い)」とすること。
- メニュー部分には、それぞれのコンテンツを表示するためのリンクを一覧として表示すること。ただし現在表示されているコンテンツを表示するものへのリンクは除くこと。