やっぱり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タグで囲まないとダメかな?


(追記)そーいや,試しに使ったJSTLJakartaのヤツだからJSTL1.1なんだな.遅延評価を含むUnified ELがJSP2.1からだとすれば,JSTL1.2じゃないと効くワケがない.
JSP2.1の"JSP.2.3.3 Deferred Value"や"JSP.2.3.4 Deferred Method"を読むと,遅延評価式を記述できる属性は,その旨をTLDに宣言せにゃならんようだ.
#JSTL1.2って単体でころがってないの〜?


というわけで,遅延評価式の受け入れを宣言したタグ属性は,もれなくValueExpressionMethodExpressionで値を受け取れるので,あとは好きに料理しなさいってことか.つまり,JSF→f:viewタグで囲む必要はなさそう.


その代わり,JSTLみたくJSF(というか遅延評価式)と協調したいタグは,deferred-valueやdeferred-methodについて検討する必要があるってことだナ.
#rtexprvalueだけでは,遅延評価式までは対応できないしね.


以上のことから推測できるのは,「遅延評価式はプリントレットの代わりにはならん」ってことか.
そもそも遅延評価式を使う場面なんて,JSF使う時くらいだろうけど,あとはJSFで「プリントレット代わりにELの即時評価式を使う場面」ってどんだけあるんだって話だろな.
#大抵の場合,h:outputタグで代用きくから,そんな場面ないのかも知れない.


それでも,即時と遅延を使い分けなきゃいけないUnified ELって,混乱の元としか思えないなぁ〜.:-(