0

调用conversation.end时是否没有重置conversation.id?

场景:我有一个在 CRUD 中使用对话范围的应用程序,所以当我访问列表页面时,它会开始对话。转到详细信息并单击返回将调用结束对话并再次开始对话。但是当我处于调试模式时,我发现当调用 conversation.end() 时,会话设置为空。然后当我重新调用 conversation.begin() 时,conversation.id 不会重置为 1,而是最后一个值 + 1。这样做是否正确?

更令人费解的是,注销并再次登录后,conversation.id 取最后一个值+1。

我的环境:使用 javaee-api 的 Jboss 7.1.3。

protected void beginConversation() {
    if (conversation.isTransient()) {
        conversation.begin();
    }
}

protected void endConversation() {
    if (!conversation.isTransient()) {
        conversation.end();
    }
}

所以基本上我有一个由所有支持bean扩展的基本实体(上面定义了上面的代码。)。呈现列表页面时,它将调用 beginConversation。在详细页面点击返回按钮将调用 endConversation。

4

1 回答 1

1

为什么要重置对话 ID?

解决这些问题的最佳方法是直接查看规范(在您的情况下为 CDI 1.0),该规范指出容器必须为对话生成一个 id,而不是如何生成。

看看这个问题,它说明了它是如何在 WELD 中完成的。

于 2013-04-18T14:26:09.567 回答