Как завершить один 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() задерживается; это работает только для следующего запроса. И кстати: это не совсем то, что поля сбрасываются; будут добавлены новые бины, и эти новые бины, конечно, будут иметь начальные значения для своих полей.

Другие вопросы по тегам