在调用conversation.end时,是否会重置conversation.id?
场景:我有一个在CRUD中使用会话范围的应用,所以当我访问列表页面时,它会启动一个对话。转到详细信息,然后单击返回将调用结束对话并再次开始对话。但是当我处于调试模式时,我发现当调用conversation.end()时,会话被设置为null。然后,当我重新调用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。
答案 0 :(得分:1)
为什么要重置会话ID?
解决这些问题的最佳方法是直接查看specification(在您的情况下为CDI 1.0),其中指出容器必须为对话生成ID,而不是如何生成。< / p>
查看this问题,该问题说明了如何在WELD中完成。