CDI和“嵌套”对话

3
我一直在阅读关于Java EE 6(因此CDI 1.0)中的对话范围以及它如何可以隔离来自浏览器不同标签页中的数据,并跨多个页面工作流程保留数据。我没有问题。
在我的阅读中,我了解到它的许多想法来自Seam。经常会看到警告,比如“但是CDI的对话范围不支持“嵌套”对话”。我不确定什么是“嵌套”对话?
我还阅读了这篇好文章:http://www.andygibson.net/blog/article/understanding-nested-conversations/,但我认为我错过了某些基本知识..我只是不完全理解这种情况下的“嵌套”对话是什么。有人能帮我简化一下吗?
1个回答

1

来自Seam 2 documentation:

嵌套对话具有其自己的对话上下文,但可以从外部对话的上下文中读取值。在嵌套对话中,外部对话的上下文是只读的,但由于对象是通过引用获得的,因此对对象本身的更改将反映在外部上下文中。

因此,使用嵌套对话,您有机会将给定的父对话拆分为多个子对话,每个子对话都有自己的上下文和访问父级上下文的权限。

尽管CDI受到Seam的很大影响,但可以说它只是几种影响的共同点,因此它并不包含Seam拥有的一切。这个想法是,通过创建CDI扩展,例如Seam 3所关注的以及现在应该由Apache Deltaspike完成的工作,可以提供更常用的功能以上CDI标准。

很不幸,我对Deltaspike提供的内容感到非常失望,尽管JavaEE 6和CDI已经存在了很长时间,但仍然存在与我在Seam 2项目中所使用的东西有所差距的问题。说实话,只需要看一下Deltaspike主页,它以“一些标志的想法”开头,这让我对它失去了信心…


好的。谢谢你的回答。那么我可以开始一个嵌套对话(可能最终会将数据提交到数据库),然后返回到父对话,而父对话(至少在内存中)不受嵌套对话的影响? - johnm
是的,你可以这么说 - 正如你所引用的文章中所述,你可以将其视为一组变量,其中父级的变量是可访问但不可更改的,每个子级都有自己的一组变量。 - Alexander Rühl
CODI/DeltaSpike的交流方式更好,而且在大多数情况下根本不需要复杂的嵌套... - Dar Whi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接