问题标签 [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.
jsf-2 - 两次调用 begin 时 JSF/CDI 会话范围内的错误
我正在使用 CDI 对话范围,当用户遵循正常情况时就可以了。但是,当用户未完成“对话”时,我收到此错误:
显然,是因为有 2 次调用begin方法而没有调用end方法。
为了澄清这一点,这是我的场景:
- 在第一页中,用户通过参考编号搜索产品。如果找到了,我会调用conversation.begin并导航到产品详细信息页面。
- 在此页面中,当用户按下保存按钮时,此时我调用了conversation.end。
问题是在用户离开的详细信息页面(例如,单击菜单中的链接)时,不会调用end方法。当他们返回搜索页面时,我收到错误,因为再次调用了begin 。
我认为,一种可能的解决方案可能是在用户存在第二页时调用end方法。但我不知道如何实现这一点。
(我正在使用 JSF 2.1 和 CDI 的 Weld 1.1.6 实现)
提前致谢
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}) 返回我的对话。
下面是我的代码的精简版本。
表格:
收藏首页:
实体首页:
java - 是什么导致会话 ID 增加
我正在尝试找出我的 CDI 对话的问题。如果我通过我的应用程序采取一条路线,我有一个有效的页面,但如果我通过另一条路线则不行。我相信这与对话有关,但我不知道是什么。
工作流程是这样发生的:
- 加载页面 A
- 打开编辑页面A
- 至此,一个新的对话开始,ID为1
- 进行编辑并保存返回我的页面 A
- 点击页面A上的链接加载页面B
- 打开编辑页面 B
- 会话以 ID 2 开始。在此开始时按刷新将启动 ID 为 3 的会话。其他刷新会增加会话 ID。
- 编辑成功发生
它不工作的工作流程是这样的:工作流程是这样发生的:
- 加载页面 A
- 点击页面A上的链接加载页面B
- 打开编辑页面 B
- 对话从 ID 1 开始。刷新页面会告诉我,我的对话 ID 仍然是 1。
- 页面上的各种操作会引发“WELD-000321 找不到要恢复 id 1 的对话”异常。
因此,这两个工作流程之间的区别在于,在工作流程中我进行了成功的编辑,当我在第二个编辑页面上时,我得到了增量对话 ID。不工作的工作流程,对话 ID 始终为 1,但我无能为力!
我想了解的事情是:
- 如果我有一个 ID 为 1 的对话,做某事然后结束对话,当我开始一个新对话时 - 它的 ID 是什么?1(此对话结束)或 2(下一个未使用的 ID)。
- 除了对话没有正确结束之外,还有什么想要我看到的递增对话 ID 的吗?据我所知,我正确地结束了我的对话。
希望其中一个问题的答案能够揭示出问题所在。感谢您的任何意见
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 与
感谢您的回复。对不起,如果这是两个问题合二为一。
servlets - 如何发布到对话范围 bean 或从 servlet 访问此 bean
在场景中,我有一个需要将数据发布到服务器网站的客户端网站。在发布过程中,服务器打开一个登录页面来验证客户端,并在成功验证后将数据存储在数据库中。
我正在使用 javaee6、jsf、ejb。
问题: 1.) 我在 servlet 上发帖,但无法获取对话范围 bean,因此我可以在登录屏幕上显示发布的数据,同时存储在对话范围 bean 中。成功登录后,从 bean 中获取数据并存储在数据库中。
2.) 我可以直接发布到一个页面,带有一个会话范围支持 bean 吗?
3.) 我的一个朋友提到了 jaas,但没有时间好好解释。我可以使用这项技术吗?
谢谢,
czetsuya
cdi - 如何在 Weld 中检索所有现有的长时间运行的对话?
我正在 JBoss 7.1.1.Final、Weld、Seam 3 中编写应用程序。我有以下 bean:
现在,用户可能会创建多个对话,每个对话都会与 ConversationBean 的实例相关联。我需要能够获得所有与长期对话相关的实例。
我需要访问它们的原因是,如果用户多次打开一篇文章(因此他将使用同一篇文章创建多个对话)。如果他在一次对话中更改了文章,我希望能够刷新其他对话中的文章。
有没有一些标准的方法来做到这一点?
编辑:“文章”实例由 entityManager 查找并在对话中进行管理。使用 Seam Managed Persistence Context 检索实体管理器。
java - 如何在每个对话中存储一个 bean
有没有办法在对话上下文中存储一些 bean?即,对于每个新对话,都会创建一个属于它的新的单独 bean。
cdi - CDI 对话范围传播:瞬态与长期运行
从焊接 CDI 文档:
对话上下文会随任何 JSF 面孔请求(JSF 表单提交)或重定向自动传播。它不会自动传播非人脸请求,例如通过链接导航。
我想知道,上下文是否也会在 JSF 面请求中传播瞬态对话?更一般地说,是否有关于瞬时和长期对话之间传播差异的概述?
假设第一个问题的答案是“是”,您能否提供一个需要长时间对话的用例?
jakarta-ee - 程序化对话查找
是否有可能以CDI conversation
编程方式获取一个实例,只知道当前thread
是用于处理CDI request
与所需对话相关联的实例?如果可能的话怎么办?
特别是,我想做的是:
但是使用编程机制来初始化uof
实例变量而不是应用 @Inject 注释(因为Client
和Room
是实体并且它们不支持注入)。
我已经尝试通过以下静态方法获得的
注入:UnitOfWork
BeanManager
但问题是通过上述方法给出的bean是新的(每次调用都会给出一个新实例),我需要它Client
并Room
共享相同的会话范围实例UnitOfWork
。
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 的对话拦截器方法也出现了类似的问题,这是我没有真正得到的解决方法。也许你可以在那里帮助我。