了解带有和不带有重定向的 JSF 生命周期阶段
Posted
技术标签:
【中文标题】了解带有和不带有重定向的 JSF 生命周期阶段【英文标题】:Understanding JSF Lifecycle phases with & without Redirection 【发布时间】:2016-08-09 18:06:26 【问题描述】:假设有 2 个 JSF 页面和一个支持 bean
index.xhtml- 带有视图参数和表单
支持 bean- 操作方法,从 index.xhtml 导航到 result.xhtml 和 NO REDIRECTION
result.xhtml- 没有表单但是输出一些文本
考虑一个简单的案例
向 index.xhtml-
发出 GET 请求类似这样的视图参数-
http://localhost:8080/Leonard/faces/ch2/ch2_8/index.xhtml?playernameparam=HAMZA&playersurnameparam=YOUSUF
执行的阶段-
响应-
点击提交-
执行的阶段-
注意:这是一个 POSTBACK,生命周期阶段是针对 index.xhtml
的 POST 请求执行的响应-
响应包含 result.xhtml 页面的内容,这些内容随后清晰地反映在浏览器窗口中。在渲染时,result.xhtml 视图的生命周期也必须执行。为什么我在控制台中看不到这个视图的阶段?
我非常清楚,通过重定向,在 POSTBACK 上,index.xhtml 的渲染响应阶段将被跳过,然后 result.xhtml 的所有阶段将被被解雇了。
【问题讨论】:
我想你的具体问题可以归结为:***.com/q/11277366 @BalusC:绝对没有,Bauke。我非常了解这些事情。我在这里要问的是,当没有重定向时,&在执行从 index.xhtml 到 result.xhtml 的导航时,result.xhtml 的内容将反映在没有当前 URL 的浏览器窗口中(即对于 result.xhtml) .要呈现此视图(result.xhtml),它必须经过生命周期阶段。那些在哪里?我的意思是相位监听器没有被触发,否则它一定已经显示在控制台中/ 生命周期是基于请求而不是基于视图。重定向会创建一个新请求(如链接中所述)。 @BalusC:是的,这是我一直在寻找的东西,但我确实没有想到。 【参考方案1】:您似乎期望生命周期是基于视图的。这确实会造成混乱。
事实上,生命周期是基于请求的,而不是基于视图的。那应该清除一切。如果您仔细想想,在同一个 HTTP 请求期间重新执行收集、转换和验证请求参数以及更新模型值和调用操作的整个周期确实是没有必要的。
另见:
What is the difference between redirect and navigation/forward and when to use what? What's the view build time?【讨论】:
@downvoter:谁否决了这个答案?至少有足够的礼貌放弃一个理由。以上是关于了解带有和不带有重定向的 JSF 生命周期阶段的主要内容,如果未能解决你的问题,请参考以下文章