1

在 Java Server Faces 2.0 - The Complete Reference 一书名为“检查 EL 的演变:延迟与即时表达式”的第 5作者写道:

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

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

4

1 回答 1

2

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

所以,想象一下你有一个

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

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

于 2012-10-28T12:45:33.490 回答