我们有一些包含
的facelet1.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 values
或Apply request
或什么?
答案 0 :(得分:6)
本教程讨论的是遗留JSP。在JSP上使用JSF时,始终在视图构建期间评估${}
,无论它在何处声明。就像JSTL,taghandlers和id
/ binding
属性在JSF中的工作方式一样。另请参阅JSTL in JSF2 Facelets... makes sense?以获得深入解释。
然而,在JSP的后继Facelets中,${}
的处理方式与#{}
完全相同。因此,${}
评估也延迟。为了避免您自己和Facelets代码的未来维护者之间的混淆,强烈建议放弃在Facelets中使用${}
并始终坚持#{}
。
在运行时期间需要结果时,延迟表达式每次进行评估。对于UIInput
组件,在验证阶段(检查提交的值是否与(old!)模型值相比,在触发所有值更改侦听器之前是否已更改)和渲染响应期间的一次(到使用(new!)模型值生成HTML输出)。如果立即对其进行评估,则设置和获取新模型值将不起作用。