8.2. iterateタグ
iterateタグはコレクションまたは配列から要素を1つずつ取り出し、設定するタグです。これによりコレクションの値を1つ1つ表示するようなページの出力が楽になります。例えば以下は、requestスコープに登録された文字列配列の値をリスト表示するJSPです。
..
<% String[] texts={"こんにちは","おはよう","さようなら"};
request.setAttribute("texts",texts); %>
<ul>
<logic:iterate id="text" name="texts">
<li><bean:write name="text" />
</logic:iterate>
</ul>
...
基本的な動作として、iterateタグはsessionなどのスコープからコレクション/配列を検索し、その要素を1つずつpageスコープに登録します。上の例ではbeanタグライブラリのwriteタグでその要素の値を出力していますので、HTMLの出力は以下のようになります。
... <ul> <li>こんにちは <li>おはよう <li>さようなら </ul> ...
さてiterateタグの詳細な説明に移ります。iterateタグの主要属性は以下の通りです。
| 属性名 | 必須 | スクリプト 可能 |
説明 |
|---|---|---|---|
|
id |
○ | コレクション/配列の各要素をpageスコープに登録する際の名前を指定します。要素はコレクション/配列から取り出された順番に登録されます。 | |
| indexId | ○ | 幾つ目の要素を取り出しているかを、pageスコープに登録する際の名前を指定します。0からカウントされます。 | |
|
name |
○ |
Java Beanをスコープから検索するためのキー。property属性が省略された場合には、Java Beanがコレクション/配列として扱われる。 |
|
|
property |
○ | コレクション/配列を格納したJava Beanのプロパティ。 | |
| collection | ○ | スクリプトレットで指定された値を、コレクション/配列として取り扱います。 | |
|
offset |
○ | コレクション/配列の何番目のインデックスの要素から取り出していくか指定する。先頭要素のインデックスは0。 | |
| length | ○ | 最大幾つの要素を取り出すか指定する。 |
iterateタグは、
- nameとproperty
- name
- collection
のいずれかの組み合わせで、対象となるコレクション/配列を指定しなければなりません。最初の例は、name属性のみを使用して指定した例です。以下に他の2つを示します。まずname属性とproperty属性を利用した例です。
public class SampleBean{
...
public java.util.List getList(){
java.util.List list=new java.util.LinkedList();
list.add("こんにちは");
...
return(list);
}
...
}
...
<% request.setAttribute("bean",new SampleBean()); %>
<logic:iterate id="text" name="bean" property="list" indexId="index">
<bean:write name="index" />: <bean:write name="text" />
</logic:iterate>
...
インデックスを使用していますので、出力は以下のようになります。
... 0: こんにちは 1: おはよう ...
最後にcollection属性を使用した例です。offsetとlengthも使用してみます。
...
<% String[] text={"こんにちは","おはよう","さようなら","おやすみ"}; %>
<logic:iterate id="text" collection="<%=text %>" offset="1" length="2">
<bean:write name="text" /><br>
</logic:iterate>
...
インデックスが1(2つ目)の要素から、最大2つまで要素を取り出しますので、出力は以下のようになります。
... おはよう<br> さようなら<br> ...
指定した値がコレクションである場合には、java.util.Iterateまたはjava.util.Enumerationで取り出せる順に要素は設定されます。またコレクションがjava.util.Mapである場合には、取り出される要素はjava.util.Map.Entryになります。
(実習課題1)
Strutsを用いて以下のWebアプリケーションを作成しなさい。
- iterateタグを用いて、九九の表を出力する事。
- 九九の値は2次元配列の形で取り扱うようにする事。

