2012-02-01 37 views
0

我想在JBoss AS 7和JSF 2.0應用程序中使用CDI的實現Weld。Weld + JSF 2.0 @ConversationScoped不保持狀態

事實是,當我開始對話時,我的@ConversationSconed @Named bean似乎沒有保持他的狀態。

在ordre中看到這一點,我只是使用一個計數器,每次點擊命令按鈕時使用Primefaces和ajax就會增加計數器。

beans.xml存在於類路徑(META-INF,WEB-INF ...)中,我只是想用@SessionScoped bean或@ManagedBean @ViewScoped精確地說,它工作得很好!

但我優先使用@ConversationScoped並保留@Named bean,而不是使用@ManagedBean。

也許我需要做的JBoss的additionaly配置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> 

我在做什麼錯了?我忘記了什麼嗎?

非常感謝您的回答!

+0

我不確定你的意思是「不保持狀態」?你期望的結果是什麼?發生了什麼? – 2012-02-19 22:45:27

+0

當我點擊這個按鈕時,我跳躍的是conversationTest.counter的數字增加,但事實並非如此。 – Zarkus13 2012-03-01 17:26:33

回答

0

您是否嘗試過使用標準h:commandButton而不是PrimeFaces變種?如果PrimeFaces使用的是AJAX(正如我記得的那樣),您可能需要將對話ID作爲參數發送。

+0

謝謝你的回答! 我會嘗試使用h:commandButton並讓你知道結果;) – Zarkus13 2012-03-01 14:48:21