关于 JSF Postback 的评论与 JSP 作为视图定义技术的混淆
Posted
技术标签:
【中文标题】关于 JSF Postback 的评论与 JSP 作为视图定义技术的混淆【英文标题】:Confusion regarding a comment of JSF Postback with JSP as the view definition technology 【发布时间】: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 视图定义技术所描述的视图吗?
【问题讨论】:
【参考方案1】:不,作者的意思是没有办法以编程方式找到$
EL 表达式引用,以便以编程方式/单独评估它们。一旦基于 JSP 输出构建 JSF 组件树,它们就已经由 JSP 引擎评估。 JSF 组件树中没有对$
EL 表达式的引用。 #
EL 表达式不被 JSP 引擎识别,因此不被 JSP 引擎直接评估。通过这种方式,JSF 可以找到它们并将它们转换为 ValueExpression
引用,从而允许以编程方式评估 getValue()
和 setValue()
等。
所以,假设你有一个
<h:inputText value="$bean.input" />
然后在视图构建期间,$
将立即由 JSP 引擎评估,并且 value 属性最终将成为 已经评估的值(由 getter 获得)。 JSF 组件的值最终将仅代表作为评估结果的“文字”值。没有办法找出整个原始 EL 表达式,以便能够在回发时设置模型值。
【讨论】:
以上是关于关于 JSF Postback 的评论与 JSP 作为视图定义技术的混淆的主要内容,如果未能解决你的问题,请参考以下文章