我只是想知道如何在 CDI 中开始新的对话。如果没有 cid 请求参数,容器似乎开始了一个新的对话,但在某些情况下,我想从我的控制器显式地开始一个新的对话。
示例:JSF 页面用于编辑会话范围控制器 bean 的实体保持。提交了一个 ajax 请求,调用控制器的方法,该方法触发一个事件,传递一个子实体,该子实体应在新对话中的不同控制器中编辑。我找不到该问题的解决方案。我已经研究了 Apache Myfaces CODI,但也找不到解决该问题的模式。
请帮我解决这个问题。
[编辑] 好的。也许我没有足够详细地描述问题。再试一次:如果我想访问具有不同(新)对话 ID 的“相同”对话范围控制器 bean 的新实例。这是如何运作的?您拥有的图像.. 可以说.. 一个 OrderControllerBean 来编辑一个 Order 实体。这个控制器有一个 JSF 操作方法,比如 public void createSubOrder()。这个方法应该创建一个新订单并用它做一些花哨的事情。之后,它应该被传递给具有不同对话 ID 的新 OrderControllerBean 实例。也许通过使用 CDI 事件。没关系。问题是:我的对话中已经存在 OrderControllerBean。它用于编辑当前订单。所以它不能用于创建和编辑我们刚刚创建的子订单。那么如何创建 OrderControllerBean 的新实例呢?也许这不是正确的方法。但到目前为止,如果不将浏览器发送到带有空白 cid 参数的新 url,我找不到另一个可能来创建新对话。但后来我无法在这些对话之间交换信息。如何将会话 1 中创建的非持久订单带到会话 2 中的同一控制器?我的问题只是关于对话的对话。如何将会话 1 中创建的非持久订单带到会话 2 中的同一控制器?我的问题只是关于对话的对话。如何将会话 1 中创建的非持久订单带到会话 2 中的同一控制器?我的问题只是关于对话的对话。
[编辑] 到目前为止,我阅读了整个文档以及随附的所有示例。根据这些陈述(http://docs.jboss.org/cdi/spec/1.0/html/contexts.html#conversationcontext),CDI 对话似乎与 JSF 密切相关。不幸的是,我找不到更深入技术细节的文档。由于没有其他方法可以像发送新请求一样获得新对话,因此有必要在视图层中直接保留有关新对话如何以及何时开始的逻辑。这绝对不是我能想象的最好的方式。我的下一个尝试是评估 Seam 3,因为我记得 Seam 2 中有一些 @Begin 和 @End 注释可以更好地控制对话。还有一些标签库可让您指定对话传播。我想知道为什么没有其他人对我有类似的问题。要么 CDI 目前对于复杂的项目还不是很普遍,要么我在理解事情应该如何工作时遇到了很大的问题。到目前为止,我找不到任何 CDI/CODI 示例,而不仅仅是一个简单的演示。如果有人有一个示例的链接,该示例显示了对话的高级使用,无论使用哪个便携式扩展,请告诉我。