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

ViewScoped bean on multiple browser tabs conflicts

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

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

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

我在 2 个浏览器选项卡中打开页面,修改并 post 选项卡 1 上的页面。然后离开选项卡 1 上的页面(操作 returns 另一个页面)。

然后,在选项卡 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 是已修补)。

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

这是 Mojarra 的一个错误,将在 2.3.10 中根据此 post 修复: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/