Находясь внутри не транзиентного разговора, мне нужно начать новый разговор для бина.
Дело в следующем: у меня есть страница jsf с cdi bean-компонентом для обработки создания и изменения заказа. В меню страницы есть пункт "новый заказ". Итак, при изменении заказа мне нужно нажать «новый заказ», и страница должна быть обновлена с новым идентификатором клиента и новой областью диалога. Но если я попытаюсь это сделать, chat.getConverstaionId() всегда будет возвращать одно и то же значение, даже если я сначала вызову talk.end() и talk.begin().
РЕДАКТИРОВАТЬ:
У меня есть страница для редактирования заказа. При нажатии на новую кнопку (меню) я хочу, чтобы она обновилась и начала новый разговор, чтобы добавить новый заказ. Итак, эта кнопка вызывает метод 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;
}
}