JSF 2.2 Conversation Scope + SPA(单页应用程序)

JSF 2.2 Conversation Scope + SPA ( Single Page Application )

我们都知道可以使用 JSF 2 编写单页应用程序,方法是对组件使用一些巧妙的 AJAX 更新,例如 < h:panelGroup >。

这里的例子: Single Page Applications with JSF

但是,我想知道是否可以在 JSF 2 中将 SPA 方法与 Conversation Scope 一起使用。

据我所知,对话范围依赖于附加到 URL 查询字符串的 "cid" 参数来定位会话中的正确对话,这隐含地意味着它仅支持 "conventional" 多页面导航,使用完整的 GET 或 POST 请求加载新的 xhtml 页面。

有什么方法可以支持 SPA 方法和会话范围吗? 换句话说,当使用新的 facelet 片段更新屏幕上的面板时,对 Conversation Scoped bean 的引用仍应引用同一实例,而不是创建一个新实例(因为缺少 "cid" 参数在 URL )

提前致谢!

问题解决!!事实证明,在尝试开始对话时出现了错误。我们正在检查 if (! conversation.isTransient()) ( false ) 而不是 true,以确定 conversation.begin() 应该被执行。在修复了那个笨拙的错误之后,Conversation Scoped bean 才开始按预期运行,即使使用 SPA 导航也是如此。太棒了!