在名为“检查EL的演变:延迟与直接表达式”的部分中命名为“托管Bean和JSF表达式语言”的第5章中作者写的Java Server Faces 2.0 - The Complete Reference书:
对JSP进行即时评估是完美的,但JSF需要一些东西 更多 。 JSF引入了请求处理生命周期(在中描述) 第3章),它管理提交表单时发生的事情 (回发)。在posback期间,呈现标记的JSP页面 正在回发的内容尚不清楚,JSF无法使用 运行时;因此,该页面中的任何表达式都不可用, 因为在呈现页面时会立即对它们进行评估。
为什么作者会说“在后座期间,呈现标记的JSP页面不被发现”?这不是JSF生命周期的恢复视图阶段恢复JSP视图定义技术描述的视图的确切责任吗?
答案 0 :(得分:2)
不,作者意味着无法以编程方式找到${}
EL表达式引用,以便以编程方式/单独评估它们。一旦基于JSP输出构建JSF组件树,它们就已经被JSP引擎评估。 JSF组件树中没有对${}
EL表达式的引用。 JSP引擎无法识别#{}
EL表达式,因此JSP引擎不会直接对其进行评估。通过这种方式,JSF可以找到它们并将它们转换为ValueExpression
引用,从而允许通过编程方式评估getValue()
和setValue()
。
所以,想象一下你有一个
<h:inputText value="${bean.input}" />
然后在视图构建时间期间,${}
将立即由JSP引擎进行评估,并且value属性最终将成为已经评估的值(由getter获得)。 JSF组件的值最终只会表示评估结果的“文字”值。为了能够在回发时设置模型值,无法完整地找出原始EL表达式。