问题标签 [conversation-scope]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2129 浏览

jsf-2 - 两次调用 begin 时 JSF/CDI 会话范围内的错误

我正在使用 CDI 对话范围,当用户遵循正常情况时就可以了。但是,当用户未完成“对话”时,我收到此错误:

显然,是因为有 2 次调用begin方法而没有调用end方法。

为了澄清这一点,这是我的场景:

  • 在第一页中,用户通过参考编号搜索产品。如果找到了,我会调用conversation.begin并导航到产品详细信息页面。
  • 在此页面中,当用户按下保存按钮时,此时我调用了conversation.end

问题是在用户离开的详细信息页面(例如,单击菜单中的链接)时,不会调用end方法。当他们返回搜索页面时,我收到错误,因为再次调用了begin 。

我认为,一种可能的解决方案可能是在用户存在第二页时调用end方法。但我不知道如何实现这一点。

(我正在使用 JSF 2.1 和 CDI 的 Weld 1.1.6 实现)

提前致谢

0 投票
2 回答
587 浏览

java - f:ajax 看不到我的对话

我的 AJAX 事件有点麻烦,我想知道是否有人可以帮助我找出哪里出错了。

我的页面上有一个下拉列表,当它更改时,我希望它更新此页面的另一部分。当我使用没有长时间对话的页面时,一切正常。但是,一旦我尝试开始长时间运行的对话并尝试使用下拉框,我就会收到“WELD-000321 找不到要恢复 id 1 的对话”错误。谁能想到这其中的原因?我确定对话已经开始并且可用于页面。这是在 Tomcat 6 上运行的,使用 Mojarra 2.1.6,Weld 1.1.5 和 PrimeFaces 也在那里(尽管这部分没有涉及)。

我可以看出错误是由于我的 f:ajax 标签的 onerror 而发生的。这是调用一个 JavaScript 函数,该函数打印出正在发生的错误对象。调试初始页面请求上的代码显示对话已启动,并且打印出对话的部分代码 (#{collectionHome.conversation}) 返回我的对话。

下面是我的代码的精简版本。

表格:

收藏首页:

实体首页:

0 投票
1 回答
1127 浏览

java - 是什么导致会话 ID 增加

我正在尝试找出我的 CDI 对话的问题。如果我通过我的应用程序采取一条路线,我有一个有效的页面,但如果我通过另一条路线则不行。我相信这与对话有关,但我不知道是什么。

工作流程是这样发生的:

  1. 加载页面 A
  2. 打开编辑页面A
  3. 至此,一个新的对话开始,ID为1
  4. 进行编辑并保存返回我的页面 A
  5. 点击页面A上的链接加载页面B
  6. 打开编辑页面 B
  7. 会话以 ID 2 开始。在此开始时按刷新将启动 ID 为 3 的会话。其他刷新会增加会话 ID。
  8. 编辑成功发生

它不工作的工作流程是这样的:工作流程是这样发生的:

  1. 加载页面 A
  2. 点击页面A上的链接加载页面B
  3. 打开编辑页面 B
  4. 对话从 ID 1 开始。刷新页面会告诉我,我的对话 ID 仍然是 1。
  5. 页面上的各种操作会引发“WELD-000321 找不到要恢复 id 1 的对话”异常。

因此,这两个工作流程之间的区别在于,在工作流程中我进行了成功的编辑,当我在第二个编辑页面上时,我得到了增量对话 ID。不工作的工作流程,对话 ID 始终为 1,但我无能为力!

我想了解的事情是:

  1. 如果我有一个 ID 为 1 的对话,做某事然后结束对话,当我开始一个新对话时 - 它的 ID 是什么?1(此对话结束)或 2(下一个未使用的 ID)。
  2. 除了对话没有正确结束之外,还有什么想要我看到的递增对话 ID 的吗?据我所知,我正确地结束了我的对话。

希望其中一个问题的答案能够揭示出问题所在。感谢您的任何意见

0 投票
0 回答
1975 浏览

scope - Seam - 了解 PAGE 范围和 CONVERSATION 范围

PAGE我仍然对和CONVERSATION(temp) 范围感到困惑。也许我在这里得到一些帮助。据我所知,PAGE只要用户只回发相同的页面,被输出到范围内的变量就会存在。相反,临时CONVERSATION范围甚至可以在重定向到下一页后幸存下来。这是一个小例子,有两个让我感到困惑的效果:

首先,组件和输出在CONVERSATION范围内,tempUser数据显示在 jsf 页面中。但是在从那个 jsf 页面调用的 save 方法中,注入tempUser的是 null。为什么?

其次,如果我做同样的事情,但将组件和@In/@Outs 范围更改为PAGE范围,则tempUser在回发时会正确注入 - 但无论出于何种原因都不会保存,尽管甚至调用了super.update()- 方法userHome。或者以这种方式使用 homeEntities 是否存在问题(仅将它们用作 DAO 包装器的想法)?

xhtml 包含 aa:form 与

感谢您的回复。对不起,如果这是两个问题合二为一。

0 投票
1 回答
243 浏览

servlets - 如何发布到对话范围 bean 或从 servlet 访问此 bean

在场景中,我有一个需要将数据发布到服务器网站的客户端网站。在发布过程中,服务器打开一个登录页面来验证客户端,并在成功验证后将数据存储在数据库中。

我正在使用 javaee6、jsf、ejb。

问题: 1.) 我在 servlet 上发帖,但无法获取对话范围 bean,因此我可以在登录屏幕上显示发布的数据,同时存储在对话范围 bean 中。成功登录后,从 bean 中获取数据并存储在数据库中。

2.) 我可以直接发布到一个页面,带有一个会话范围支持 bean 吗?

3.) 我的一个朋友提到了 jaas,但没有时间好好解释。我可以使用这项技术吗?

谢谢,
czetsuya

0 投票
2 回答
2123 浏览

cdi - 如何在 Weld 中检索所有现有的长时间运行的对话?

我正在 JBoss 7.1.1.Final、Weld、Seam 3 中编写应用程序。我有以下 bean:

现在,用户可能会创建多个对话,每个对话都会与 ConversationBean 的实例相关联。我需要能够获得所有与长期对话相关的实例。

我需要访问它们的原因是,如果用户多次打开一篇文章(因此他将使用同一篇文章创建多个对话)。如果他在一次对话中更改了文章,我希望能够刷新其他对话中的文章。

有没有一些标准的方法来做到这一点?

编辑:“文章”实例由 entityManager 查找并在对话中进行管理。使用 Seam Managed Persistence Context 检索实体管理器。

0 投票
1 回答
2410 浏览

java - 如何在每个对话中存储一个 bean

有没有办法在对话上下文中存储一些 bean?即,对于每个新对话,都会创建一个属于它的新的单独 bean。

0 投票
1 回答
1863 浏览

cdi - CDI 对话范围传播:瞬态与长期运行

从焊接 CDI 文档:

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

我想知道,上下文是否也会在 JSF 面请求中传播瞬态对话?更一般地说,是否有关于瞬时和长期对话之间传播差异的概述?

假设第一个问题的答案是“是”,您能否提供一个需要长时间对话的用例?

0 投票
2 回答
1832 浏览

jakarta-ee - 程序化对话查找

是否有可能以CDI conversation编程方式获取一个实例,只知道当前thread是用于处理CDI request与所需对话相关联的实例?如果可能的话怎么办?

特别是,我想做的是:

但是使用编程机制来初始化uof实例变量而不是应用 @Inject 注释(因为ClientRoom是实体并且它们不支持注入)。 我已经尝试通过以下静态方法获得的
注入:UnitOfWorkBeanManager

但问题是通过上述方法给出的bean是新的(每次调用都会给出一个新实例),我需要它ClientRoom共享相同的会话范围实例UnitOfWork

0 投票
1 回答
782 浏览

java - struts2 对话和验证

我正在研究一个具有相互依赖形式的 struts2 项目。我找到了 struts2-conversation,逐步完成了他们的简单示例 并理解了到目前为止的对话机制(如果我有错误,请纠正我):

  • Controller 映射在 struts.xml 中
  • 它拥有可序列化的 ConversationContext 和 Storing-Service
  • ConversationContext 保存通过命名约定映射到表单上的 POJO

现在我的问题是在哪里放置验证?

在这个结构中,控制器只是一个扩展 ConversationSupport 的控制器,因此 ActionSupport 提供了 validate、prepare 和 addField- & ActionError 方法。但是在控制器内验证意味着验证整个上下文,这并不能真正解决问题。

我尝试通过 POJO 中的注释进行验证,在如上所述的上下文中,这给了我一些 NullPointerException 好像上下文没有刷新,我认为 struts2 的 xml 验证方法太僵硬了。(顺便说一句,如何让生成的 javascript 在提供服务之前缩小?为什么有这么多选项?)

Mark 的对话拦截器方法也出现了类似的问题,这是我没有真正得到的解决方法。也许你可以在那里帮助我。