1
虽然在一个不受欢迎的对话中,我需要为这个bean启动一个新的对话。新的CDI对话
情况如下:我有一个带有cdi bean的jsf页面来处理创建和更改订单。在页面的菜单中有一个项目是“新订单”。因此,在更改订单时,我需要点击“新订单”,并且必须使用新的CID和新的对话范围刷新页面。但是,如果我尝试这样做,即使我先调用conversation.end()和conversation.begin(),conversation.getConverstaionId()也会始终返回相同的值。
编辑:
我有一个页面来编辑订单。当点击一个新的按钮(菜单)时,我希望它刷新并开始新的对话,以添加新的订单。所以这个按钮调用方法redirectToNewOrderPage()。但它有代码和之前描述的问题。
@Named
@ConversationScoped
public class OrderEditBean implements Serializable {
private static final long serialVersionUID = 1L;
@Inject
private Conversation conversation;
[...]
public void redirectToNewOrderPage() {
String cid = createNewConversationId();
setOrder(null);
try {
FacesContext.getCurrentInstance().getExternalContext().redirect("/OrdersManager/restricted/orders/edit.xhtml?cid=" + cid);
} catch (IOException e) {
e.printStackTrace();
}
}
private String createNewConversationId() {
String oldConversationId = null;
String newConversationId = null;
oldConversationId = conversation.getId();
if (!conversation.isTransient() && conversation.getId() != null) {
conversation.end();
}
conversation.begin();
newConversationId = conversation.getId();
// **************
// at this point newConversationId is equal to
// oldConversationId if the conversation was NOT transient.
// **************
return newConversationId;
}
}
你有什么想法吗?我只需要重定向到同一页面,但是用新的对话... – dgimenes 2012-03-06 20:11:12
不,对不起。也许如果你挖入impl并看看它的apis。 – LightGuard 2012-03-08 16:08:36
没关系。谢谢! – dgimenes 2012-03-13 17:45:21