问题标签 [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 投票
0 回答
532 浏览

jsf-2 - #{javax.enterprise.context.conversation.id} 始终为空

我在我的 template.xhtml 上使用这个表达式

但是当我执行代码时,输​​出总是

对话 []。

为什么不渲染此表达式的返回值?

我在 Windows 8.1 上使用 NetBeans 8、Glassfish 4.1、JSF 2.2 (Mojarra)

0 投票
1 回答
282 浏览

jsf - 在异步方法中注入 ConversationScoped bean

我需要从 ConversationScoped bean 调用 EJB 中使用 @Asynchronous 注释的方法。在这个方法中,我使用 @Inject 创建了一些类的实例来注入 ConversationScoped bean。是否可以将异步方法的上下文设置为给定的对话?

我希望你能帮助我。

0 投票
1 回答
4061 浏览

java - 是否可以从现有的请求范围激活会话范围和对话范围?

我有一个@EJB注入的豆子TransactionCompleteJob。这个 bean 上有一个@Asynchronous方法asyncCompleteTransaction(Integer transactionId)

当我尝试在此方法中使用会话范围或会话范围的其他注入 bean 和实体时,我最终得到一个错误:

WELD-001303: No active contexts for scope type javax.enterprise.context.ConversationScoped

所以我注入了weld BoundConversationScopeBoundSessionScopeBoundRequestScope激活了它们,为请求数据生成一个空映射,为会话数据生成一个空映射,如jboss焊接文档所指定:

问题是,在激活请求范围时,我收到另一条错误消息:

WELD-001304: More than one context active for scope type javax.enterprise.context.RequestScoped

我试过不激活请求范围,但我似乎最终会导致实际请求范围内的任何东西的资源泄漏,特别是我有一个请求范围的 JPA EntityManager。特别是一旦该过程完成,我会看到另一条消息:

WELD-000019: Error destroying an instance org.hibernate.jpa.internal.EntityManagerImpl@5df070be of Producer Method [EntityManager] with qualifiers [@RequestScopey @Any] declared as [[BackedAnnotatedMethod] @Produces @RequestScoped @RequestScopey public packagename.entitymanager.EntityManagerProducer.createRequestScopedEntityManager()]

当我已经激活了一个请求范围上下文时,如何启动一个请求范围上下文?或者启动与现有请求范围上下文相关的会话范围上下文和对话范围上下文?或者,有没有更好的方法来解决这个问题?

编辑:

有什么方法RequestScope可以在开始我自己的焊接之前抓住它,以便我可以停用它?或者一种异步启动我的TransactionCompleteJob异步方式,而不注入它并调用该@Asynchronous方法?

0 投票
1 回答
268 浏览

jsf - 对话开始后未更新 ConversationScope 值

我有一个 jsf 页面,它有两个部分:一个显示记录列表的表格和一个添加新记录的对话框。我添加了一些验证功能,但我无法让它们正常工作。我需要它:

1)第一次出现对话框时未出现验证错误

2) 如果发生任何验证错误,请保持打开状态并显示错误消息。

3)如果没有验证错误并且后端执行成功,则更新表。

这就是我所拥有的:

豆子:

我在这里有两个问题:

1)在我提交一个空字符串后,我希望对话框仍然打开(因为 addMode 为真)但事实并非如此。为什么?

2)如果我像这样放置“添加”按钮:

至少当我再次打开对话框时,我可以看到错误消息。但是在我的代码中,我看不到错误消息。为什么会这样?他们不是等价的吗?

我的理解有什么问题吗?

请帮忙。非常感谢。

0 投票
1 回答
3441 浏览

cdi - CDI 对话 Bean - BusyConversationException

我有一个会话范围的 bean,ComponenteM,它被注入到请求范围的 bean,ComponenteC 中。


ComponenteC 有一个由 HtmlCommandLink(以编程方式创建)调用的导出方法。导出方法调用与 SAP BO Web 服务集成的 Web 服务,以便将报告导出到 Excel。但是,只有当通话时间过长时,我才会收到 BusyConversationException。每隔不到 10 分钟的其他导出都是成功的。
同时,我在对话中没有其他呼叫(AJAX 或非 AJAX 呼叫)。我已经尝试在开始对话时为对话 bean 设置显式超时,但我读到它仅作为对 CDI 容器的建议,它可能会被忽略:


错误是:
ServletException.org.jboss.weld.context.BusyConversationException 的根本原因:WELD-000322 对话锁定超时:1

我还尝试通过线程发出导出请求,然后将导出的文档返回到对话中。我的想法是让一个线程忙于处理文档和 componenteC 的导出,在等待线程完成时,偶尔会检查 componenteM.beginConversation();


我试图理解为什么即使没有并发请求也会抛出 BusyConversationException。
谢谢你。

0 投票
1 回答
205 浏览

java - CDI 中的 ConversationScoped 流

我现在从 CDI 中的 conversationScoped 开始,我正在考虑如何在同一个对话中配置页面。

我想配置一个 XML 来表示:page1 和 page2 应该在同一个会话Scoped 中,page3 应该在新会话中。

Obs:在接缝 2 中,我知道有 pages.xml,但我没有使用接缝。

哪种方法更好?

0 投票
1 回答
2008 浏览

jsf - 在每个请求中调用 ConversationScoped bean 的 PostConstruct 方法

好吧,我正在使用 ConversationScoped,我希望 PostConstruct 在对话开始时只被调用一次,请参阅:

因此,当创建我的支持 bean 时,会话被初始化,CID 存储在会话中以供以后使用。我的 XHTML 中有一个命令按钮“保存”,当调用此按钮时,再次调用 PostConstruct,我不知道为什么:

我注意到生成的 HTML 是:

所以,我理解“href=#”避免了onlick被执行。我认为这是问题所在,但我不知道如何解决。记住:salvarAndRedirecionar() 方法永远不会被调用,因为 postConstruct 总是在之前被调用。

2)我还有一个问题:如果我开始对话但没有结束,有什么问题吗?有时我不想手动结束对话,因为我只有一页,我才开始。

0 投票
1 回答
314 浏览

java - 我需要获取 CDI bean 中注入的对话接口的吸气剂吗?

我有一个@ConversationScopedCDI bean,其Conversation接口注入和访问修饰符设置为私有。像这样的东西:

我的问题是这个注入的对话界面是否需要一个吸气剂?CDI 容器是否需要这个 getter?我可以从中了解 CDI 容器如何处理对话的基本细节的任何资源也将非常有帮助。

0 投票
0 回答
391 浏览

jsf - 在页面到页面导航期间重构的 @ConversationScoped bean

当我从一页切换到另一页时,我发现了一个奇怪的行为。

我正在使用 CDI、Jsf 2.2 API 2.2.8、Omnifaces 2.2、Primefaces 5.2、wildfly 8.2。

大多数控制器和页面都按预期工作,但其中一些控制器和页面在我访问页面时调用方法@PostConstruct,它开始对话,然后,当我离开页面时,再次调用@PostConstruct。我意识到 page.xhtml 中的某些东西是原因,所以我开始寻找它。但无论如何都是一种奇怪的行为。

按照我的代码和一些示例:

使用抽象类方法的控制器,例如 beginconversation() 和 list()

抽象类

我发现问题的一些 xhtml 页面和解决方案(当我发现时)是:

错误:

上面的方法只是返回一个模式。

在职的


错误:

在职的:

问题只是“绑定”。


错误:

在职的:

只需删除“filteredValue”即可开始工作。但是没有它,我就无法使用过滤器属性。


导航是由 primefaces 菜单组成的,所有页面都是相同的逻辑:

和方法:

0 投票
0 回答
1294 浏览

jsf - JBWEB006003:无法将类型类 java.lang.String 的对话转换为接口 java.util.Map

我正在尝试将一些会话范围的 bean 转换为会话范围。当我尝试从我的页面访问其中一个 bean 中的方法时menu.xhtml,我收到以下错误:

这是堆栈跟踪:

这是如何引起的,我该如何解决?