多个浏览器选项卡上的 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 冲突的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 jQuery Validate 正确验证放置在多个选项卡上的 Twitter 引导表单?