1

我正在尝试找出我的 CDI 对话的问题。如果我通过我的应用程序采取一条路线,我有一个有效的页面,但如果我通过另一条路线则不行。我相信这与对话有关,但我不知道是什么。

工作流程是这样发生的:

  1. 加载页面 A
  2. 打开编辑页面A
  3. 至此,一个新的对话开始,ID为1
  4. 进行编辑并保存返回我的页面 A
  5. 点击页面A上的链接加载页面B
  6. 打开编辑页面 B
  7. 会话以 ID 2 开始。在此开始时按刷新将启动 ID 为 3 的会话。其他刷新会增加会话 ID。
  8. 编辑成功发生

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

  1. 加载页面 A
  2. 点击页面A上的链接加载页面B
  3. 打开编辑页面 B
  4. 对话从 ID 1 开始。刷新页面会告诉我,我的对话 ID 仍然是 1。
  5. 页面上的各种操作会引发“WELD-000321 找不到要恢复 id 1 的对话”异常。

因此,这两个工作流程之间的区别在于,在工作流程中我进行了成功的编辑,当我在第二个编辑页面上时,我得到了增量对话 ID。不工作的工作流程,对话 ID 始终为 1,但我无能为力!

我想了解的事情是:

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

希望其中一个问题的答案能够揭示出问题所在。感谢您的任何意见

4

1 回答 1

0

从您写的内容看来,对话的开始和传播存在问题。如果没有您描述的问题,用例当然是可以实现的。您可能想在此处发布一些相关代码。

如果我有一个 ID 为 1 的对话,做某事然后结束对话,当我开始一个新对话时 - 它的 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 的吗?据我所知,我正确地结束了我的对话。

不,您在这里没有任何遗漏。问题很可能出在您的代码中(这是个好消息,因为您可以更改它:-)

于 2012-05-06T10:07:51.443 回答