Как завершить один CDI разговор и полностью уничтожить все переменные CDI Bean?
Я использую JSF2.0, WELD-CDI и jboss AS7.Я использую CDI@ConversiationScope в back-backbean. Чтобы перейти на одну страницу, я использую пункт меню., Как показано:
<rich:menuItem
label="redirect to page1"
execute="@this"
action="#{myBean.begin}"/>
В действии этого меню вызывается следующий метод, чтобы начать разговор и затем перенаправить на нужную страницу:
@Named(value = "myBean")
@ConversationScoped
public class MyBean implements Serializable {
@Inject
private Conversation conversation;
public String begin() {
if (!conversation.isTransient()) {
conversation.end();
}
conversation.setTimeout(“1800000”);
conversation.begin();
return "page1";
}
}
и лица-config.xml:
<navigation-case>
<from-outcome>page1</from-outcome>
<to-view-id>/sample/page1.xhtml</to-view-id>
<redirect/>
</navigation-case>
Пока все отлично работает.
Но если я подам еще раз, кстати, после execute разговор.end(), все равно никакие переменные изменения и все значения переменных не поддерживаются. Зачем?!
после exexute "dialog.end()" значенияпеременных не сбрасываются. Почему переменные не сбрасываются? Пожалуйста, помогите мне.
1 ответ
Когда вы заканчиваете разговор, он становится преходящим. Это означает, что его содержимое будет уничтожено после завершения запроса. Это, однако, означает, что вызов end() не меняет bean-компоненты, пока вы все еще находитесь в том же запросе. Другой способ сказать, что эффект end() задерживается; это работает только для следующего запроса. И кстати: это не совсем то, что поля сбрасываются; будут добавлены новые бины, и эти новые бины, конечно, будут иметь начальные значения для своих полей.