关于使用JSP作为视图定义技术的JSF Postback注释的困惑

时间:2012-10-28 09:21:26

标签: jsp jsf jsf-2 jstl el

在名为“检查EL的演变:延迟与直接表达式”的部分中命名为“托管Bean和JSF表达式语言”的第5章中作者写的Java Server Faces 2.0 - The Complete Reference书:

  

对JSP进行即时评估是完美的,但JSF需要一些东西   更多 。 JSF引入了请求处理生命周期(在中描述)   第3章),它管理提交表单时发生的事情   (回发)。在posback期间,呈现标记的JSP页面   正在回发的内容尚不清楚,JSF无法使用   运行时;因此,该页面中的任何表达式都不可用,   因为在呈现页面时会立即对它们进行评估。

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

1 个答案:

答案 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表达式。