Weld + JSF 2.0 @ConversationScoped не сохраняет состояние - PullRequest
0 голосов
/ 02 февраля 2012

Я пытаюсь использовать реализацию CDI Weld, на JBoss AS 7 и в приложении JSF 2.0.

Дело в том, что мой бин @ConversationSconed @Named, похоже, не сохраняет свое состояние, когда я начинаю разговор.

Чтобы увидеть это, я просто использую счетчик, который я увеличиваю каждый раз, когда нажимаю на командную кнопку, используя Primefaces и ajax.

Файл beans.xml присутствует в пути к классам (META-INF, WEB-INF ...), и я просто хочу уточнить, что с компонентом @SessionScoped или @ManagedBean @ViewScoped он работает очень хорошо!

Но я предпочитаю использовать @ConversationScoped и использовать бин @Named, а не @ ManagedBean.

Может быть, мне нужно сделать дополнительную настройку для JBoss AS 7 или в файле web.xml, я не знаю ...

Вот мой бин @ConversationScoped:

@Named
@ConversationScoped
public class ConversationTest implements Serializable {
    private int counter;

    @Inject
    private Conversation conversation;

    public void startConversation() {
        System.out.println(counter);

        counter++;

        if(conversation.isTransient())
            conversation.begin();
    }

    public void stopConversation() {
        if (!conversation.isTransient())
            conversation.end();
    }

    public int getCounter() {
        return counter;
    }

    public void setCounter(int counter) {
        this.counter = counter;
    }
}

А вот содержимое моей страницы xhtml:

    <h:form prependId="false">
        <h:panelGroup id="tests">
            <h:outputText value="#{conversationTest.counter}" /> <br/>
            <h:outputText value="Test : #{conversationTest.testHello}" /> <br/><br/>
        </h:panelGroup>

        <p:commandButton
                value="Start !"
                actionListener="#{conversationTest.startConversation}"
                update="tests" />
        <br/>

        <p:commandButton
                value="Stop !"
                actionListener="#{conversationTest.stopConversation}"
                update="tests" />
    </h:form>

Что я делаю не так? Я что-то забыл?

Большое спасибо за ваши ответы!

1 Ответ

0 голосов
/ 29 февраля 2012

Вы пытались использовать стандартную кнопку h: commandButton вместо PrimeFaces?Если PrimeFaces one использует AJAX (что, как я помню, это так), вам может понадобиться отправить идентификатор разговора в качестве параметра.

...