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

java - Stripes 框架中的对话范围

我目前坚持使用Stripes Framework

好多年没用了,也习惯了其他框架的特性。我想念的一件事是对话(或浏览器窗口)范围。有没有办法在 Stripes 中实现它?

0 投票
3 回答
2470 浏览

java-ee-6 - 通过 @ConversationScoped 方法提供 EntityManager

我尝试在 JBoss7 中运行由 maven archetype groupId: org.fluttercode.knappsack, artifactID: jee6-sandbox-archetype 生成的简单 JEE6 应用程序。(通过这个turial,对不起,用德语)

但是,当调用欢迎 JSF 时,我收到以下错误消息:

实际上,应该返回 EntityManager 实例的 DataRepositoyProducer 类被定义为以下注释:

如果我使用@RequestScoped,应用程序将按承诺运行。我想知道为什么其他完成本教程的人没有遇到这个问题?以及如何正确修复它(使用@RequestScoped 意味着为每个用户请求重新创建bean,对吗?我预计效率不是很高)

官方 JEE6 教程说:“使用会话、应用程序或会话范围的 bean 必须是可序列化的,但使用请求范围的 bean 不必是可序列化的”。但是,这似乎不是问题所在,因为服务器并没有抱怨 bean 不可序列化,而是生产者 bean 的产品。

0 投票
1 回答
37061 浏览

jsf - JSF 2 ConversationScope 是如何工作的?

我有一个 JSF facelets 页面,该页面根据他们正在查看的页面显示数据表。当我显示第 1 页时,我调用view()action 方法从数据库中获取两个页面的数据并将其存储为 bean 的私有成员字段(两个数组)。我还在方法中调用conversation.start()了注入的对话实例view()

当用户单击“下一步”h:commandButton按钮next()(问题是,数组 2 不再存在。我不知道为什么我失去了谈话范围。有任何想法吗?

0 投票
1 回答
346 浏览

java-ee-6 - 如何观察(或拦截)从 CDI 开始的对话?

我想观察或拦截Conversation.begin()CDI 中的方法调用,以便储存新的Conversation.getId()并列出所有打开的对话。

我在规范 ( JSR-299 )中找不到如何观察此类事件。我正在考虑复杂的扩展系统,它可能会使用ProcessInjectionTargetorProcessProducer或其他事件来做到这一点......但我觉得它存在另一个更简单的解决方案......

0 投票
2 回答
3522 浏览

java - 表单提交时对话不会自动传播?

我有以下对话范围的支持 bean:

以及以下 facelets 视图:

当我进入页面时,我看到INFO: Creating TestConversation bean!!!哪个是正确的。

但后来我点击了h:commandLink,我看到了:

信息:创建 TestConversation bean!!!
信息:调用 commandLinkAction

再次创建了 bean,这意味着对话没有传播。我认为这与以下内容相矛盾:

引用自文档

与呈现 JSF 视图的请求关联的长时间运行的对话上下文会自动传播到源自该呈现页面的任何面孔请求(JSF 表单提交)。

如果我添加它,<f:param name="cid" value="#{javax.enterprise.context.conversation.id}"/>那么一切正常。我有什么误解吗?

PS没有f:param它,当我第二次点击它时它工作正常commandLink,但不是第一次:(。

0 投票
1 回答
6775 浏览

java - 对话范围是否适合替代视图范围?

在 JSF 2.0 中,视图范围最明显的用例是具有可能多个 AJAX 回发的单个页面。使用 CDI 而不是 JSF 托管 bean 使我们没有视图范围,因此我们要么实现我们自己的,要么使用(可能充满错误的)第三方实现,要么使用会话范围。

我的问题:在典型的 AJAX 情况下,对话范围是否值得替代视图范围?像视图范围一样,它是否允许每个会话有多个实例?有哪些陷阱?

我知道其中一个陷阱,即当用户离开页面时对话范围不会自动删除,而是在超时后被删除。但我不确定当用户在对话超时之前导航回该页面时会发生什么。

更新

会话范围确实支持每个会话的多个实例。这本书说明了很多,我能够使用来自 ch 的代码来确认这一点。2.

0 投票
1 回答
347 浏览

.net - 城堡活动记录对话

全部,

我查看了对话和对话范围领域的 Castle Active Record 项目(在 .net 中)的源代码。我得出的结论是,活动记录中的对话不能跨越不同的线程。换句话说,当我在线程 A 上创建对话,而不是尝试在线程 B 上使用 ConversationalScope(使用在线程 A 上创建的当前对话)时,我访问例如在线程 AI 上加载的实例上的惰性集合将得到异常因为检查当前线程范围的 SesessionFactoryHolder 将找不到线程 B 的任何注册范围,因为线程范围(在 Windows 形式中)是按线程存储的(线程静态字段)。

上述理解正确吗?如果是,那不是限制吗?对话应该能够跨越不同的线程。如果这是真的,我想请教一些想法,如何在不编写大量代码的情况下跨多个线程共享休眠会话(使用 Castle Active Record)。

编辑:我想在这篇文章中补充一下我的最新发现。上面关于对话不跨越线程的说法仍然成立。关于无法在另一个线程上加载惰性集合的说法是错误的。可以在另一个线程上延迟加载惰性集合(在此示例中为线程 B)。我发现这样做的原因是,只要对话存在,会话就会存在,因此可以访问惰性集合。

编辑2:我想通了。我将在旧帖子中留下这个答案,以便其他对此主题有疑问的人可以受益。

解答: 在城堡活动记录框架中,对话可以跨线程共享。发生的情况是,在新线程上,会话范围始终使用以下行注册:

ConversationalScope 范围 = 新的 ConversationalScope(currConv)

因此,当前线程具有有效的会话范围。然后 SessionFactoryHolder 被迫使用线程的当前会话范围(而不是使用其本地会话)。检索休眠会话的逻辑是将这个任务委托给会话,该会话将返回最后一个休眠会话(在前一个线程 A 上创建)。因此,如果会话范围有效(未释放),您将获得由另一个线程创建的相同会话。

这是示例代码:

0 投票
1 回答
1195 浏览

jsf-2 - 如何创建调用操作且不保留 cid 的链接或按钮?

这是一个我无法实现的简单用例:我想创建一个链接或按钮,它调用服务器方法(操作)并将重定向到页面而不保留cid参数。

我正在使用 JSF2、JBoss 7 和 Seam 3。

以下是我尝试过的两种方法,但均未成功。

第一个,h:commandLink

在这里,identity.logout()被调用,但是浏览器被重定向到pages/home.xhtml?cid=1,所以如果我再次登录,我将有一个

错误。

第二个,h:link

cid在这里,我生成的超链接中没有任何,但是identity.logout()没有调用该方法...

有人有想法吗?

0 投票
1 回答
953 浏览

jsf-2 - SelectBooleanCheckbox 呈现状态与支持 bean 不匹配

我正在使用 JSF2.0 并正在构建一个向导。我遇到了 SelectBooleanCheckboxes 的问题。这是工作流程:

  • 加载带有复选框的页面(值绑定到支持 bean 中的 SortedMap)。
  • 勾选它们,然后单击下一步。这会增加一个光标,页面使用它来确定加载哪个 PanelGroup。
  • (正确的)值被持久化到 bean 中。
  • 单击返回(光标递减),页面呈现可编辑复选框。第一个复选框未选中(即使绑定变量为该框保存值 true)。

这种基于光标的方法(包含所有向导屏幕)似乎不起作用。但是,如果我稍微修改一下,以便上一个/下一个按钮显示不同的 xhtml 页面,这个问题就会消失。

不幸的是我不能这样做。我们将把这个向导插入一个模态对话框,所以在 prev/next 上访问新页面将不起作用

我已经写了一个小例子(而不是要求你遍历整个向导)。

这是Java类:

这是 XHTML 片段:

欢迎任何建议!(对不起,如果这是一个双重职位,我在这里搜索时无法发现任何类似的东西)

0 投票
1 回答
996 浏览

jsf - Weld + JSF 2.0 @ConversationScoped 不保持状态

我正在尝试在 JBoss AS 7 上和 JSF 2.0 应用程序中使用 CDI 的实现 Weld。

事实是,当我开始对话时,我的 @ConversationSconed @Named bean 似乎并没有保持他的状态。

为了看到这一点,我只是使用一个计数器,每次单击命令按钮时,我都会使用 Primefaces 和 ajax 递增。

beans.xml 存在于类路径(META-INF,WEB-INF ...)中,我只想用@SessionScoped bean 或@ManagedBean @ViewScoped 精确说明,它工作得很好!

但我更喜欢使用@ConversationScoped 并使用@Named bean,而不是使用@ManagedBean。

也许我必须为 JBoss AS 7 或 web.xml 做额外的配置,我不知道......

这是我的@ConversationScoped bean:

这是我的 xhtml 页面的内容:

我究竟做错了什么 ?我是不是忘记了什么?

非常感谢您的回答!