在名为“托管Beans和”的第5章中,作者在书“JavaServerFaces2.0--完整的参考”的“检查EL的演变:Deferrred与即时表达式”一节中写道:
即时评估对于JSP来说是完美的,但是JSF需要更多的东西。JSF引入了请求处理生命周期(在第3章中描述),该生命周期控制表单提交时发生的事情(回发)。在偏置过程中,呈现回发标记的JSP页面不为JSF运行时所知,也不可用于JSF运行时;因此,该页面中的任何表达式都不可用,因为在呈现页面时会立即对其进行评估。
为什么作者说“在后置过程中,呈现回发标记的JSP页面不为人所知”?这不正是JSF生命周期中恢复视图阶段的责任吗?
发布于 2012-10-28 12:45:33
不,作者的意思是没有办法以编程方式找到${} EL表达式引用,以便以编程方式或单独地对它们进行评估。在基于JSP输出构建JSF组件树之后,JSP引擎已经对它们进行了评估。在${}组件树中没有对JSF表达式的引用。JSP表达式不被JSP识别,因此不是由#{}引擎直接计算的。通过这种方式,JSF可以找到它们并将它们转换为ValueExpression引用,这允许getValue()和setValue()等人以编程方式进行评估。
所以,想象一下你有一个
<h:inputText value="${bean.input}" />然后,在视图构建期间,${}将立即由JSP计算,并且value属性最终将是已经计算过的值(如getter获得的)。JSF组件的值最终只能表示“文字”值,这是计算的结果。为了能够在回发上设置模型值,无法找到完整的原始EL表达式。
https://stackoverflow.com/questions/13107657
复制相似问题