多个浏览器选项卡上的 ViewScoped bean 冲突

Posted

技术标签:

【中文标题】多个浏览器选项卡上的 ViewScoped bean 冲突【英文标题】:ViewScoped bean on multiple browser tabs conflicts 【发布时间】:2019-07-10 08:27:15 【问题描述】:

我正在使用 JSF Mojarra 2.3.8 和 Tomcat 8(CDI 和 JPA 需要额外的库)。 我有一个 ViewScoped bean:

@Named @ViewScoped
public class MyBean implements Serializable 
...

我有一个使用这个 bean 的页面。

我在 2 个浏览器选项卡中打开页面,在选项卡 1 上修改并发布页面。然后离开选项卡 1 上的页面(该操作返回不同的页面)。

然后,在选项卡 2 上,我尝试修改并保存相同的记录。没有报错,但是从日志中可以看到MyBean被重新创建,丢失了原来的数据。

为了保存数据,我正在使用:

<h:commandButton type="submit" value="Save" action="#myBean.saveData" />

我认为 ViewScoped bean 可以在多个选项卡上独立使用。如果这是真的,为什么一个页面会影响与另一个页面关联的同一个 bean?

看来我也遇到了这里描述的同样问题:Multiple browser tabs or windows with the same ViewScoped bean class 但可惜没有答案。

虽然这可能与javax.faces.view.ViewScoped bean and multiple tabs issue 具有相同的根本原因,但我不认为这是重复的,因为我没有使用 WildFly,因此该问题的答案与我的不同(即 WildFly 已修补)。

【问题讨论】:

您还关注了该问题评论中的链接?以及评论中链接的答案中的链接? WildFly 的“问题”链接?请做。 javax.faces.view.ViewScoped bean and multiple tabs issue的可能重复 看来这是 Mojarra 中的一个错误,有望在 2.3.10 版本中修复? @Kukeltje 我不认为这是重复的,因为我没有使用 WildFly,所以该问题的答案与我的不同(即 WildFly 已修补)。 “这是 Mojarra 中已知且已解决的问题”是 Wildfly 和 Tomcat+Mojarra 的答案。 Wildfly 用户需要升级到打补丁的 WF,Mojarra 用户需要升级到打补丁的 Mojarra。我看不出有什么不同。 【参考方案1】:

如果其他人有同样的问题,我认为这是目前最接近答案的事情:

这是 Mojarra 的一个错误,将根据这篇文章在 2.3.10 中修复:https://github.com/eclipse-ee4j/mojarra/issues/4509#issuecomment-453188481

在 Mojarra 2.3.10 发布之前,使用 WildFly 16 附带的版本可能会起作用,因为 Wildfly 团队已经修补了该版本(但我没有尝试过)。 如果您使用的是 Wildfly 或 Payara,请考虑升级到最新版本(WF 为 16 Alpha 1),因为它们都已打补丁(但截至本答案尚未在 GA 中)。

更新: 2.3.10 版可以在它的新家找到:http://central.maven.org/maven2/org/glassfish/jakarta.faces/2.3.10/

【讨论】:

以上是关于多个浏览器选项卡上的 ViewScoped bean 冲突的主要内容,如果未能解决你的问题,请参考以下文章

页面刷新和多个选项卡上的 Vuex 状态

如何使用 jQuery Validate 正确验证放置在多个选项卡上的 Twitter 引导表单?

javascript 当用户失去对站点的焦点时,切换浏览器选项卡上的文本(标题)(切换选项卡)

Flutter - 选项卡上的动态高度

在多个选项卡 VBA 上汇总/平均行到表格

MSVC++ 的属性选项卡上的 Items 是啥意思?