关于 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 作为视图定义技术的混淆的主要内容,如果未能解决你的问题,请参考以下文章

JSF vs Facelets vs JSP [重复]

JSF、RichFaces、PrimeFaces 和 IceFaces 之间的区别

Java:如何从 JSP JSF 页面生成 PDF 文件?

jsf struts jsp spring 啥关系和区别?

jsf 2.0 中的不可见评论? [复制]

Facelet,Servlet,JSP,JSF之间的区别和关系[重复]