具有相同 ViewScoped bean 类的多个浏览器选项卡或窗口

2023-12-11

将 Payara Server 4.1.2.174 与 mojarra 2.2.15 结合使用。

我有一个简单的命名 Bean,其范围为 javax.faces.view.ViewScoped。

import java.io.Serializable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.faces.view.ViewScoped;
import javax.inject.Named;


@Named
@ViewScoped
public class SimpleBean implements Serializable
{
    private final Logger logger = Logger.getLogger(SimpleBean.class.getName());

    @PostConstruct
    private void init()
    {
        logger.log(Level.SEVERE, "{0}.init()", this);
    }

    private String name;

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public String action()
    {
        logger.log(Level.SEVERE, "{0}.action()", this);
        logger.log(Level.SEVERE,"====================");
        logger.log(Level.SEVERE, "name: {0}", getName());
        logger.log(Level.SEVERE,"====================");
        return "submit";
    }
}

所以我有一个带有表单的简单index.xhtml 页面。

<h:form>
  <h:inputText value="#{simpleBean.name}"></h:inputText>
  <h:link value="To submit" outcome="submit"/>
  <h:commandButton value="Welcome Me" action="#{simpleBean.action()}"/>
</h:form>

我可以在两个不同的浏览器选项卡或窗口中打开index.xhtml。所以,我有以下日志:

Severe: [email protected]()
Finest: Handling PostConstructViewMapEvent
Finest: Handling PreDestroyViewMapEvent
Finest: Destroying @viewscoped beans from view map: {simpleBean=solvo.ee.beans.SimpleBean@2adafd68}
Severe: [email protected]()
Finest: Handling PostConstructViewMapEvent
Finest: Handling PreDestroyViewMapEvent
Finest: Destroying @viewscoped beans from view map: {simpleBean=solvo.ee.beans.SimpleBean@49a86248}

正如我们所看到的,SimpleBean 有两个不同的实例。之后我提交第一个选项卡的表单。

Severe: [email protected]()
Severe: ====================
Severe: name: First tab
Severe: ====================
Finest: Handling PreDestroyViewMapEvent
Finest: Destroying @viewscoped beans from view map: {simpleBean=solvo.ee.beans.SimpleBean@2adafd68}
Finest: Handling PreDestroyViewMapEvent
Finest: Destroying @viewscoped beans from view map: {}

如果我尝试提交第二个选项卡的表单,则不会使用先前存储的 SimpleBean 实例 (solvo.ee.beans.SimpleBean@49a86248),而是 ViewScopeContextManager 将创建 SimpleBean 类的新实例,如我们在日志:

Severe: [email protected]()
Severe: [email protected]()
Severe: ====================
Severe: name: Second tab
Severe: ====================
Finest: Handling PreDestroyViewMapEvent
Finest: Destroying @viewscoped beans from view map: {simpleBean=solvo.ee.beans.SimpleBean@4797f115}
Finest: Handling PreDestroyViewMapEvent
Finest: Destroying @viewscoped beans from view map: {}

我已经检查了 com.sun.faces.application.view.ViewScopeContextManager.copyViewScopeContextsFromSession 方法的代码,据我了解,这种行为是正常的。 但是,如果我在 bean 中存储请求参数或其他重要数据,我将丢失它,因为提交第一个表单后实例将丢失。

是否有解决方案主要使 bean 与第二个选项卡关联(在我的示例中 solvo.ee.beans.SimpleBean@49a86248 中)?


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

从同一线程来看,Payara 似乎已经应用了补丁,而无需等待 2.3.10 版本。升级到已打补丁的 Payara 是否可以解决您的问题?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有相同 ViewScoped bean 类的多个浏览器选项卡或窗口 的相关文章

随机推荐

  • 如何用纯 JavaScript 制作这样的工具提示

    我需要使用 JS 而非 JQuery 插件来制作一个简单的工具提示 如下图所示 Click on image should open this tooltip and click again on the same image to clo
  • 反序列化时如何忽略 JSON 对象数组中的空白数组?

    我正在使用 Json NET 反序列化 JSON 我怎样才能忽略一个空白数组意外发生在对象数组反序列化期间 我已经在这个网站上测试了来自第三方的以下 JSONhttp json parser online fr 确认它是格式良好的 tota
  • 每个 google-maps api 密钥的引荐来源限制

    我们为超过 2500 家客户提供网站 CMS 解决方案 几乎所有网站都有谷歌地图模块 因此 自从谷歌改变了其地图使用政策以来 所有这些网站的地图模块日复一日地出现错误 我们需要想出一些快速 但肮脏 的解决方案 我们决定使用多个 api ke
  • pip Python 3 权限错误

    我在 Mac OS X 上使用 Python 3 一切都很完美 我曾经安装这样的软件包 pip install somePackage 但 IDLE 停止工作 所以我不得不重新安装它 之后 当我运行 pip 时 我得到了pip is not
  • numpy - ndarray - 如何删除基于另一个数组的行

    我想从基于另一个数组的 ndarray 中删除行 例如 k 1 3 99 n 1 a 2 b 3 c 4 c 99 a 100 e 期望结果 out 2 b 4 c 100 e k 中包含值的行的第一列将被删除 您可以使用np in1d创建
  • Shiny:使用 selectizeInput 选择组

    我有这样的愿景 我有一个选择器 用户可以单击该组来选择该组中的所有项目 例如 请参见this 当您单击输入框 X2 或 X4 时 我希望用户能够单击 西部 以选择加利福尼亚州和华盛顿州 理想情况下 我希望用户能够选择多个区域 并且能够自定义
  • Javascript 返回 OR(||) 运算的字符串

    我无法理解这一点 以下是使用 OR 运算符的表达式 var subCond1 adj getData relationEnabled true adj getData unhideIfHidden adj getData hlFixed t
  • 如何使用 awk 打印出最后一个模式范围?

    我的文件是这样的 开始模式 第一场比赛 结束模式 其他文字 开始模式 第二场比赛 结束模式 其他文字 开始模式 这就是我 想要打印出来 结尾 图案 其他文字 如何使用 awk 打印出最后一场比赛 我只知道如何打印所有这些匹配项 取决于您是否
  • 奇怪的 UIButton 行为:这正常吗?

    我有一个简单的 UIButton 想要在用户触摸它时执行某些操作 但随后将手指移到按钮之外并不触摸屏幕 所以看来我需要监听 UIControlEventTouchUpOutside 事件 在我的视图控制器中 我这样做了 UIButton b
  • java静态类单例与泛型

    我正在尝试创建如下所示的单例 但我不断收到警告 如果可能的话 我不想抑制警告 有办法做到吗 现在 我不想考虑线程安全性 我只是想传递这个警告 public interface Storage
  • vbscript - 将 Internet Explorer 应用程序窗口置于前面

    我有一个脚本 我通过它创建一个 IE 窗口CreateObject InternetExplorer Application 问题是 每当我运行这个脚本时 它总是在我的机器上可能已经打开的其他脚本之后打开 我希望这个 IE 窗口在其他所有窗
  • 使用 Clipboard.js 时 data-clipboard-text 不起作用

    我有一个简单的结构要测试clipboard js但它不起作用 我在一个简单的文件中使用 因为它在项目中也不起作用
  • MySQL select unique 不起作用

    我有一个数据库 其中有 1 个表 其中包含以下行 id name date 1 Mike 2012 04 21 2 Mike 2012 04 25 3 Jack 2012 03 21 4 Jack 2012 02 12 我只想提取不同的值
  • CSS3 - 动画文本左/中/右对齐

    我有一行 未换行 全角 div 内的文本 是否可以为这个元素设置动画text alignment所以文本移动到给定的一侧 中心 我知道我可以测量宽度并使用relative absolute positioning 但我没有找到直接的解决方案
  • ReferenceError:Jdbc未定义,V8版本问题?

    我的代码已经每天运行 6 个月了 但现在似乎不再运行了 我知道 Google App Script Runtime 更新了 V8https developers google com apps script guides v8 runtim
  • 如何调试 exec() 问题?

    exec 命令在我的服务器上不起作用 它不执行任何操作 我已关闭安全模式 并验证所有控制台命令都正常工作 我已尝试使用绝对路径 我已经检查了应用程序的权限 我需要的所有应用程序都有执行权限 我不知道还能做什么 这是我尝试过的代码的概要 ec
  • 去饱和效果消除了对比度

    我对 javaFx 的 ColorAdjust 效果有一个非常具体的问题 我正在尝试在图像上应用灰度滤镜 我正在使用 ColorAdjust 效果并设置饱和度 这是我正在尝试做的事情的可重复示例 public class App exten
  • JavaScript 默认等待而不是手动等待

    Async await 确实很方便 但我想要与它们相反的行为 我希望函数能够屈服 除非我手动指定它们继续并行运行 而不是其他函数继续运行 除非我手动要求它们等待承诺 例如 这段代码会打印出1 3 2 function wait ms ret
  • 以相同的时间/间隔从视频创建多个缩略图

    我需要使用 ffmpeg 同时从视频创建多个缩略图 例如 12 例如 如果视频时长 60 秒 我需要每 5 秒提取一次屏幕截图 我使用以下命令在第 5 秒内获取帧 ffmpeg ss 5 i video webm frames v 1 s
  • 具有相同 ViewScoped bean 类的多个浏览器选项卡或窗口

    将 Payara Server 4 1 2 174 与 mojarra 2 2 15 结合使用 我有一个简单的命名 Bean 其范围为 javax faces view ViewScoped import java io Serializa