やっぱりUnifed ELってJSF使った場合のみ有効なんだろうなぁ。
#というのは勘違い.:-P
まだ仕様書で確認はしてないけどね。とりあえず,こんなトイプロで確認だけしといた。
<%@ page contentType="text/html; charset=Windows-31J" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <jsp:useBean id="list" class="java.util.ArrayList" /> <% list.add("aaa"); list.add("bbb"); list.add("ccc"); %> <html> <body> <%-- これは評価されない --%> <c:forEach var="item" items="#{list}" > <c:out value="#{item}" /><br> </c:forEach> <hr> <%-- こっちは評価される --%> <c:forEach var="item" items="${list}" > <c:out value="${item}" /><br> </c:forEach> </body> </html>
でもこれ,JSF(FaceServlet)経由だと結果違うんだろうなぁ。
#あとf:viewタグで囲まないとダメかな?
(追記)そーいや,試しに使ったJSTLはJakartaのヤツだからJSTL1.1なんだな.遅延評価を含むUnified ELがJSP2.1からだとすれば,JSTLも1.2じゃないと効くワケがない.
JSP2.1の"JSP.2.3.3 Deferred Value"や"JSP.2.3.4 Deferred Method"を読むと,遅延評価式を記述できる属性は,その旨をTLDに宣言せにゃならんようだ.
#JSTL1.2って単体でころがってないの〜?
というわけで,遅延評価式の受け入れを宣言したタグ属性は,もれなくValueExpressionやMethodExpressionで値を受け取れるので,あとは好きに料理しなさいってことか.つまり,JSF→f:viewタグで囲む必要はなさそう.
その代わり,JSTLみたくJSF(というか遅延評価式)と協調したいタグは,deferred-valueやdeferred-methodについて検討する必要があるってことだナ.
#rtexprvalueだけでは,遅延評価式までは対応できないしね.
以上のことから推測できるのは,「遅延評価式はプリントレットの代わりにはならん」ってことか.
そもそも遅延評価式を使う場面なんて,JSF使う時くらいだろうけど,あとはJSFで「プリントレット代わりにELの即時評価式を使う場面」ってどんだけあるんだって話だろな.
#大抵の場合,h:outputタグで代用きくから,そんな場面ないのかも知れない.
それでも,即時と遅延を使い分けなきゃいけないUnified ELって,混乱の元としか思えないなぁ〜.:-(