CDI ConversationScoped 长时间运行的 Bean 不工作

2023-12-04

我在理解 Weld 或 CDI 的对话范围时遇到一些问题。

在我的 JSF Faclets 页面中,我调用:

        <f:metadata>
            <f:event type="preRenderView" listener="#{viewBean.start}" />
        </f:metadata>

豆子:

import javax.enterprise.context.Conversation;
import javax.enterprise.context.ConversationScoped;
@Named
@ConversationScoped
public class ViewBean implements Serializable {

@Inject
    private Conversation conversation;

public void start() {
    if (conversation.isTransient()) {
        System.out.println("START CONVERSATION");
        conversation.begin();

    }
}

现在,每次我刷新浏览器时,都会开始一个新的对话。这是正确的行为吗?那么为什么谈话总是短暂的呢?没有抛出异常。 beans.xml 已创建并且为空:

<beans xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
</beans>

简短回答: 是的,这是正确的行为。

长答案:对话代表一个“工作单元”,必须对其进行明确划分。这是通过显式调用对话.begin() 来完成的 - 正如您已经所做的那样。如果您想在多个请求中使用同一个对话,则必须传播它——这就是你not正在做 :-)

当您传播对话时,对话 ID 会附加到请求中。这告诉容器需要哪个对话。当您点击刷新按钮而请求中没有对话 ID 时,将为每个请求生成一个新对话。

从文档中:

自动对话上下文 随任何 JSF faces 请求一起传播 (JSF 表单提交)或重定向。它 不会自动传播 非面孔请求,例如, 通过链接进行导航。

如果您需要手动传播它,只需将对话 ID 添加到请求中即可:

<h:link outcome="/addProduct.xhtml" value="Add Product">
   <f:param name="cid" value="#{javax.enterprise.context.conversation.id}"/>
</h:link>

所有这些以及更多的内容都得到了解释here.

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

CDI ConversationScoped 长时间运行的 Bean 不工作 的相关文章

随机推荐

  • Android如何为回收器视图制作自定义滚动条

    我有一个用于回收器视图的自定义垂直滚动条 但用于显示项目位置的拇指有点太大 并且在顶部时处于关闭位置 在styles xml中 我使用thumb xml和track xml文件定义了自定义滚动条 用于自定义轨道和拇指 在 recyler x
  • Android:如何触发软键盘上的任意按键事件?

    有没有办法以编程方式按下 Android 软键盘的按键 就像 当键盘出现时 我想通过我的代码而不是手指按 J 键 第一种方法 IBinder binder ServiceManager getService window IWindowMa
  • fgets 被跳过

    我有一个小程序 我想询问一个选项 然后询问一个文件名 Some code before printf n printf 1 Register a file n printf 2 Get global list n printf 3 Down
  • Java - 无法解析的日期,需要格式匹配“GMT-0400”

    我有以下Java DateFormat formatter new SimpleDateFormat EEE MMM dd yyyy HH mm ss zZ zzzz Locale ENGLISH Calendar cal Calendar
  • Java 加载自定义字体文件 (.ttf)

    我在下面使用了这段代码 它出现了这个堆栈跟踪 java io FileNotFoundException font ttf No such file or directory at java io FileInputStream open
  • Python ctypes:在 c 中调用具有自定义类型的函数

    我正在尝试包裹预先存在的c代码用于 Linux 中的 Python 我对 c 的经验很少 目前我正在使用 ctypes 来解决这个问题 我的 C 函数需要一个带有自定义类型条目的二维数组 我不知道如何在 python 中重新创建它以将其传递
  • 错误“Gradle 同步失败:连接被拒绝:连接”

    所以我过了很长一段时间才再次安装Android Studio 它要求我配置代理 所以我就这么做了 我测试了连接并且成功了 然后它要求我配置 Gradle 的代理设置 我使用了相同的配置 现在 在加载最新的 Vuforia Sample 项目
  • 具有空初始化的对象的生命周期

    当前的标准草案说 以前的标准有类似的措辞 基本生活 1 对象或引用的生命周期是其运行时属性 对象或参考 一个物体被称为非空的 初始化 如果它是类或聚合类型 并且它或其中之一 它的子对象是由一个构造函数而不是一个简单的构造函数初始化的 默认构
  • 如何创建没有任何中间文件的 Hive 表?

    我想创建并填充配置单元表而不从磁盘加载任何内容 具体来说 我有 set idlist 1 2 3 set values 2 3 5 我想创建一个包含 9 行的表 id value 1 2 1 3 1 5 2 2 2 3 2 5 3 2 3
  • main函数可以重载吗?

    两个有效版本main 存在于C int main version 1 int main int argc char argv version 2 但两种过载不能同时共存 为什么不 潜在用例 从终端运行程序时 如果没有传递参数 则调用第一个版
  • Google Analytics 和 __utm.gif 文件

    当使用 Google Analytics 并使用较新的 ga js 文件时 您网站的根目录中是否需要 utm gif 文件 我确实看到我的浏览器对 google analytics com 上的文件进行了调用 http www google
  • 为什么在哈希映射中查找项目比在数组中查找项目更快?

    您可能在某个地方提到过在 hashmap dictionary table 中查找元素比在 list array 中查找元素更快 我的问题是为什么 到目前为止我做出的推论 为什么它应该更快 据我所知 在这两种数据结构中 它必须遍历直到到达所
  • 多个模板匹配仅检测到一个匹配项

    我正在尝试匹配这张图片 在这张图片中 然而 我找不到超过一个的头目敌人 我需要做什么才能找到其他人 图片加载 struct XYposition float X float Y std vector
  • 如何使用 jQuery 获取 HTTP 状态代码?

    我想检查页面是否返回状态代码401 这可能吗 这是我的尝试 但它只返回 0 ajax url http my ip test test php data complete function xhr statusText alert xhr
  • 在 PHP 中,可以在同一行实例化一个对象并调用一个方法吗?

    我想做的是这样的 method result new Obj gt method 而不必这样做 obj new Obj method result obj gt method 在我的具体情况下 结果实际上对我来说并不重要 但是 有办法做到这
  • 计算属于某个类别及其子类别的所有帖子

    我非常感谢对我的问题的帮助 我有 2 个 MySQL 表 类别和帖子 布局 简化 如下 类别 CATID 名称 Parent id posts PID 名称 类别 我想做的是获取每个类别的帖子总数 包括子类别中的所有帖子 现在 我通过执行以
  • 如何在 iOS 中的小键盘上添加“完成”按钮

    因此 小键盘默认情况下没有 完成 或 下一步 按钮 因此我想添加一个 在 iOS 6 及更低版本中 有一些向键盘添加按钮的技巧 但它们似乎在 iOS 7 中不起作用 首先我订阅显示通知的键盘 NSNotificationCenter def
  • Selenium 不会刷新 Jenkins 上的页面

    我有一个测试用例是这样的 打开主页 如果没有内容 刷新页面 继续其他步骤 这是代码的相关部分 public JpoPO driver get Settings JPO TEST URL PageFactory initElements dr
  • 信息窗口的替代品

    谷歌地图信息窗口的缺点之一是地图会移动 为信息窗口的显示腾出空间 冒泡 http econym org uk gmap ebuble html 克服了这个限制 它不会移动地图 然而 它有其自身的局限性 由于它的工作方式 您不能像信息窗口一样
  • CDI ConversationScoped 长时间运行的 Bean 不工作

    我在理解 Weld 或 CDI 的对话范围时遇到一些问题 在我的 JSF Faclets 页面中 我调用