【问题标题】:Immediate and deffered evaluation EL即时和延期评估 EL
【发布时间】:2013-11-18 03:17:42
【问题描述】:

让我们有一些 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 还是什么?

【问题讨论】:

    标签: jsf el


    【解决方案1】:

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

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

    当运行时需要其结果时,每次都会评估延迟表达式。对于UIInput 组件,这是在验证阶段一次(在触发所有值更改侦听器之前检查提交的值是否与(旧!)模型值相比发生了变化)和一次在渲染响应期间(生成 HTML输出(新!)模型值)。如果立即评估,设置和获取新的模型值是行不通的。

    另见:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-09
      • 1970-01-01
      • 1970-01-01
      • 2014-06-21
      • 2013-03-30
      • 2011-04-18
      • 1970-01-01
      相关资源
      最近更新 更多