r42utils (0.1.11) | 2010-08-14 20:05 |
<s:iterator>と同等の機能を提供しますが、ループ変数のスコープを<r:foreach>の内側に限定します。
また、ローカル変数スコープタグでもあります。
タグのボディをJSPとしてレンダリングした結果をそのまま出力します。
- <%@ page pageEncoding="UTF-8"%>
- <%@ taglib uri="/struts-tags" prefix="s"%>
- <%@ taglib uri="/r42fw-tags" prefix="r"%>
- <r:foreach var="hoge" value="{1, 2, 3}">
- (hoge) = <s:property value="#hoge" />
- <%-- foreachローカル変数スコープタグでもある --%>
- <r:set-local var="moge" value="'abc'" />
- </r:foreach>
- (hoge) = <s:property value="(#hoge == null ? 'null' : #hoge)" />
- (moge) = <s:property value="(#moge == null ? 'null' : #moge)" />
実行結果
(hoge) = 1 (hoge) = 2 (hoge) = 3 (hoge) = null (moge) = null
main.jsp
- <%@ page pageEncoding="UTF-8"%>
- <%@ taglib uri="/struts-tags" prefix="s"%>
- <%@ taglib uri="/r42fw-tags" prefix="r"%>
- <r:block>
- <r:set-local var="hoge" value="1" />
- (hoge in main.jsp) = <s:property value="#hoge" />
- <s:include src="./sub.jsp" />
- (hoge in main.jsp) = <s:property value="#hoge" />
- </r:block>
sub.jsp
main.jspの実行結果
(hoge in main.jsp) = 1 (hoge in sub.jsp) = 1 (hoge in sub.jsp) = 2 (hoge in sub.jsp) = 3 (hoge in main.jsp) = 1
<r:foreach>はローカル変数スコープタグですが、 通常のプログラミング言語におけるforループとはブロックの扱いが異なることに注意する必要があります。
例えば、Javaのコードで言うところの
このように記述したとき、変数iはループする度に毎回初期化されます。 一方で、<r:foreach>タグを使って次のように記述することは、
Javascriptで言うところの (言語が入り混ってしまいすいません) このように記述することと同値です。
従ってローカル変数iは、ループする度に初期化されるわけではありません。
[PageInfo]
LastUpdate: 2009-08-12 20:29:53, ModifiedBy: takahashikzn
[Permissions]
view:all, edit:members, delete/config:members