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


この記事は

選択肢 投票
おもしろかった 171  
そうでもない 91  
  • struts勉強中です。わかりやすくて参考にさせていただきました。 -- yamatatsu? 2008-09-24 (水) 22:28:28
  • struts勉強中です。わかりやすくて参考にさせていただきました。 -- yamatatsu? 2008-09-24 (水) 22:28:52
  • わかりやすくて参考にさせていただきました -- 研修中? 2012-01-13 (金) 13:21:27
  • tt -- a? 2017-08-18 (金) 13:22:17

Top / Struts / Iterateタグの使い方

現在のアクセス:56221


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

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-08-18 (金) 13:24:48 (38d)