2012-05-04 56 views
1

我正在尝试追查我的CDI对话中存在的问题。如果我通过我的应用程序采用一条路线,那么我有一个工作页面,但如果我经过另一个路线,则无法工作。我相信这是谈话相关的东西,但我无法弄清楚什么。发生这样的导致对话ID增加的原因

工作流程:

  1. 加载网页A
  2. 打开编辑页面一个
  3. 在这一点上,一个新的对话是从1开始
  4. 制作编辑的ID和保存返回我页面A
  5. 点击链接进入A页加载页面B
  6. 打开编辑页面B
  7. 对话以ID 2开头。在此开始处按刷新将开始ID为3的对话。其他刷新会增加对话ID。
  8. 编辑成功时

工作流,其中它不工作是这样的: 发生这样的工作流程:

  1. 加载网页的网页A到A
  2. 点击链接载入页面B
  3. 打开编辑页面B
  4. 对话以ID 1开始。刷新页面会告诉我,我的对话ID是sti ll 1.
  5. 页面上的各种操作会抛出“WELD-000321找不到恢复ID为1的对话”异常。

所以这两个工作流程之间的差异,在工作流程我做一个成功的编辑&当我为我的第二个编辑页面上,我得到增量对话的ID。不工作的工作流程,对话ID始终为1,但我什么也做不了!

,我想了解的事情是:

  1. 如果我有1 ID的交谈,做一些事情,然后结束谈话,当我开始一个新的对话 - 会是什么的ID是? 1(如此对话结束时)或2(下一个未使用的ID)。
  2. 除了谈话没有被正确结束之外,还有什么东西想要我看到的递增对话ID?据我所知,我正确地结束了我的谈话。

希望对其中之一的答案能够揭示出现问题的一些原因。感谢您的任何输入

+0

记住张贴一些代码?视图和支持豆? – LightGuard

回答

0

从您写的内容来看,听起来好像会话的启动和传播有问题。没有你描述的问题,用例肯定是可以实现的。你可能想在这里发布一些相关的代码。

如果我有1 ID的对话,然后做一些结束 交谈,当我开始一个新的对话 - 将它的ID是什么呢? 1(正如本次会话结束时)或2(下一个未使用的ID)。

未指定CDI创建新ID的方式。焊接执行以下操作:

public class ConversationIdGenerator implements Callable<String>, Serializable { 

    public static final String CONVERSATION_ID_GENERATOR_ATTRIBUTE_NAME = ConversationIdGenerator.class.getName(); 

    private static final long serialVersionUID = 8489811313900825684L; 

    // The next conversation ID 
    private final AtomicInteger id; 

    /** 
    * Creates a new conversation ID generator 
    */ 
    public ConversationIdGenerator() { 
     this.id = new AtomicInteger(1); 
    } 

    public String call() { 
     int nextId = id.getAndIncrement(); 
     return String.valueOf(nextId); 
    } 

} 

有什么除了没有正确 结束了谈话,就是想递增对话的ID,我 看?据我所知,我正确地结束了我的谈话。

不,你没有在这里失踪。最有可能的问题将出现在你的代码中(这是个好消息,因为你可以改变它:-)

相关问题