JSF中Initial Request 和 Postback Request 的区别

首先来看JSF的生命周期图:



一个完整的JSF Lifecycle 有以下流程:

恢复视图(Restore View) --> 应用请求值(Apply Requests) --> 处理验证(Process Validations) --> 更新模型(Update Model Values) --> 调用应用程序(Invoke Apjplication) --> 渲染响应(Render Response), 其中,无论哪个阶段发生错误(Exception),都会直接跳转到 Response 阶段而不会继续走下去。


一个 Initial Request 是指用户通过点击一个链接(Link)或直接通过浏览器地址栏输入Url所发送的请求,其实相当于 GET 请求。JSF在收到这类请求时,只会走 Restore VIew --> Render Response 流程,后面的阶段都会跳过。如果被请求的页面包含以下代码

<h:inputText value="#{user.name}" />

的话,那么JSF会在 Render Response 阶段解析该EL表达式,并解析一次。这样做的坏处是,假如用户直接通过URL访问的页面中有需要查询数据库才能读取来的数据,那么由于JSF根本没有走完后面的流程,所以这些数据就无法显示。Seam则通过 Page Action 对这一不足做出了改进,即Seam可以在 Render Response 之前执行一个或多个 action 方法,这样数据就能正常显示了。



一个 Postback Request 是指用户提交表单或者单击了绑定有action属性的链接时所发出的请求,相当于Post请求。JSF在收到此类请求时,会走完生命周期的全部流程。就上面的例子来说,JSF会在不同的阶段多次解析这个EL表格式,而不是像 initial request 那样只解析一次。

JSF中Initial Request 和 Postback Request 的区别,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。