Top / Struts / Iterateタグの使い方

Iterateタグの使い方

RequestやSession,PageContext?,Applicationなど、あるスコープ内に、配列やイテレータなどのインスタンスが存在するとき、iterateタグを利用することによってループ処理を非常に簡潔に記述することができます。

Collectionが、あるスコープに存在する場合

下のコードは authenticateListというCollectionのインスタンスがrequestにAttributeされている場合のサンプルです。

<logic:iterate id="authenticate" name="authenticateList" scope="request">
  <bean:write name="authenticate" property="userId" />
</logic:iterate>

配列が、あるスコープに存在する場合

下のコードはjavadocsという名前の配列がrequestスコープに存在する場合のサンプルです。

<logic:iterate id="javadoc" name="javadocs" scope="request">
<tr>
  <td><bean:write name="javadoc" property="className" /></td>
  <td><bean:write name="javadoc" property="url" /></td>
</tr>
</logic:iterate>
<%--
  id: loop内のBeanの変数名(loop内のbean:writeなどでname属性として使われる)
  name,scope: scopeからgetAttribute(name)
--%>

と記述をすると

  1. request.getAttribute("javadocs");とやって配列を取得し
  2. ループ内では配列内の個々のインスタンスはjavadocという変数名となり
  3. javadoc.getClassName?()やらjavadoc.getUrl()などのメソッドが呼ばれ画面に表示
  4. 配列の要素数分繰り返される

といったことが行われます。

フィールドに配列を保持するインスタンスが、あるスコープに存在する場合

下のコードは、getBookmarks()というメソッドで配列を返すインスタンス(bookmarks)が、sessionに存在する場合のサンプルです。

<%--
  id: loop内のBeanの変数名(loop内のbean:writeなどでname属性として使われる)
  name,scope: scopeからgetAttribute(name)
  property: 配列を返すプロパティ名。下例ではget+bookmarks=getBookmarksというメソッドが呼ばれる
--%>
<logic:iterate id="bookmark" name="bookmarks" property="bookmarks" scope="session">
  <bean:write name="bookmark" property="name" />
  <html:link paramName="bookmark" paramId="name" paramProperty="name" 
             page="/edit.do?action=edit">編集</html:link>
</logic:iterate>

イテレータが、あるスコープに存在する場合

Iterator が「pageContext」などにいるとする(名前をeとしよう)。そのとき、

<logic:iterate id="user" name="e">
  <bean:write name="user" property="userid" />
</logic:iterate>

とアクセス可能。*1*2


この記事は

選択肢 投票
おもしろかった 63  
そうでもない 25  

Top / Struts / Iterateタグの使い方

現在のアクセス:521


*1 property属性とかでフィールドを取得するとかが必要ないからね
*2 userというインスタンスはgetUserid()というメソッドをもつクラスです。念のため

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS