【问题标题】:Confusion regarding a comment of JSF Postback with JSP as the view definition technology关于 JSF Postback 的评论与 JSP 作为视图定义技术的混淆
【发布时间】:2012-10-17 22:37:39
【问题描述】:

在名为“Managed Beans and the JSF Expression Language”的第 5 章中名为“检查 EL 的演变:延迟表达式与立即表达式”的部分中本书Java Server Faces 2.0 - The Complete Reference作者写道:

立即评估对于 JSP 来说是完美的,但 JSF 需要一些东西 更多的 。 JSF 引入了请求处理生命周期(在 第 3 章),它控制提交表单时发生的情况 (回发)。在回发期间,呈现标记的 JSP 页面 正在回发的内容未知且对 JSF 不可用 运行时;因此,该页面中的任何表达式都不可用, 因为它们在页面呈现时立即被评估。

为什么作者说“在回发期间,呈现正在回发的标记的 JSP 页面是未知的”?这难道不是 JSF 生命周期的恢复视图阶段的确切职责,即恢复 JSP 视图定义技术所描述的视图吗?

【问题讨论】:

    标签: jsp jsf jsf-2 jstl el


    【解决方案1】:

    不,作者的意思是没有办法以编程方式找到${} EL 表达式引用,以便以编程方式/单独评估它们。一旦基于 JSP 输出构建 JSF 组件树,它们就已经由 JSP 引擎评估。 JSF 组件树中没有对${}EL 表达式的引用。 #{} EL 表达式不被 JSP 引擎识别,因此不被 JSP 引擎直接评估。通过这种方式,JSF 可以找到它们并将它们转换为 ValueExpression 引用,从而允许以编程方式评估 getValue()setValue() 等。

    所以,假设你有一个

    <h:inputText value="${bean.input}" />
    

    然后在视图构建期间,${} 将立即由 JSP 引擎评估,并且 value 属性最终将成为 已经评估的值(由 getter 获得)。 JSF 组件的值最终将仅代表作为评估结果的“文字”值。没有办法找出整个原始 EL 表达式,以便能够在回发时设置模型值。

    【讨论】:

      猜你喜欢
      • 2014-08-04
      • 2016-11-26
      • 2018-03-29
      • 2013-09-15
      • 1970-01-01
      • 2018-07-05
      • 2011-02-03
      • 2016-07-17
      相关资源
      最近更新 更多