即时和延期评估EL

时间:2013-11-18 03:17:42

标签: jsf el

我们有一些包含

的facelet 1.xhtml
<h:inputText id="prop" value="#{MyBean.myProperty}"/>
包含

和facelet 2.xhtml

<h:inputText id="prop" value="${MyBean.myProperty}"/>

引自官方教程:

Immediate evaluation means that the expression is evaluated and the result returned as soon as the page is first rendered. 

我不明白立即表达的具体阶段是什么?在Render Response阶段或Update model valuesApply request或什么?

1 个答案:

答案 0 :(得分:6)

本教程讨论的是遗留JSP。在JSP上使用JSF时,始终在视图构建期间评估${},无论它在何处声明。就像JSTL,taghandlers和id / binding属性在JSF中的工作方式一样。另请参阅JSTL in JSF2 Facelets... makes sense?以获得深入解释。

然而,在JSP的后继Facelets中,${}的处理方式与#{}完全相同。因此,${}评估延迟。为了避免您自己和Facelets代码的未来维护者之间的混淆,强烈建议放弃在Facelets中使用${}并始终坚持#{}

在运行时期间需要结果时,延迟表达式每次进行评估。对于UIInput组件,在验证阶段(检查提交的值是否与(old!)模型值相比,在触发所有值更改侦听器之前是否已更改)和渲染响应期间的一次(到使用(new!)模型值生成HTML输出)。如果立即对其进行评估,则设置和获取新模型值将不起作用。

另见: