关于使用JSP作为视图定义技术的JSF回发注释的混淆

关于使用JSP作为视图定义技术的JSF回发注释的混淆,jsp,jsf,jsf-2,jstl,el,Jsp,Jsf,Jsf 2,Jstl,El,在第5章“托管bean和JSF表达式语言”,作者在书中“检查EL:延迟表达式与立即表达式的演变”一节中写道: 即时评估非常适合JSP,但JSF需要一些东西 更多JSF引入了请求处理生命周期(如中所述) 第3章),该章规定了提交表单时发生的情况 (回邮)。在posback期间,呈现标记的JSP页面 被发回的消息是未知的,JSF也不可用 运行时间;因此,该页中的任何表达式都不可用, 因为在呈现页面时会立即计算它们 为什么作者说“在posback过程中,呈现被发回标记的JSP页面是未知的”?这不是JS

在第5章“托管bean和JSF表达式语言”,作者在书中“检查EL:延迟表达式与立即表达式的演变”一节中写道:

即时评估非常适合JSP,但JSF需要一些东西 更多JSF引入了请求处理生命周期(如中所述) 第3章),该章规定了提交表单时发生的情况 (回邮)。在posback期间,呈现标记的JSP页面 被发回的消息是未知的,JSF也不可用 运行时间;因此,该页中的任何表达式都不可用, 因为在呈现页面时会立即计算它们


为什么作者说“在posback过程中,呈现被发回标记的JSP页面是未知的”?这不是JSF生命周期的restore view阶段还原JSP视图定义技术所描述的视图的确切职责吗?

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

所以,想象一下你有一个

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

然后,在视图构建期间,
${}
将立即由JSP引擎计算,并且value属性将最终成为已经计算的值(由getter获得)。JSF组件的值最终只表示“literal”值,该值是计算的结果。为了能够在回发时设置模型值,无法找到完整的原始EL表达式