2011-10-06 96 views
5

我想要做不同的管理豆多個動作與相同的按鈕,一個是範圍的會議和其他請求。在我的例子中,我爲兩者使用了相同的bean。會話範圍的託管bean和ActionListener的

的index.xhtml

<h:form> 
     <p:commandButton image="ui-icon ui-icon-notice" action="#{controller.inc()}" update="result"> 
      <f:actionListener type="controller.Controller" /> 
     </p:commandButton> 
    </h:form> 

    <p:panel id="result"> 
     #{controller.count} 
    </p:panel> 

controller.Controller.java

@Named(value = "controller") 
@SessionScoped 
public class Controller implements ActionListener, Serializable 
{ 
    int count = 0; 

    public Controller(){ 
     System.out.println("new"); 
    } 

    public void inc(){ 
     count += 1; 
    } 

    public int getCount(){ 
     return count; 
    } 

    @Override 
    public void processAction(ActionEvent event) throws AbortProcessingException{ 
     count += 1000; 
    } 
} 

在按下該按鈕由1計數增加而不是1001,並創建一個新的bean。我做錯了什麼 ?

謝謝。

回答

7

這是預期的行爲。 <f:actionListener type>在每個聲明上創建並獲取自己的bean實例。它不重用由JSF管理的同一會話作用域bean。

您需要使用binding而不是綁定到已創建的會話範圍bean實例。

<f:actionListener binding="#{controller}" /> 
+0

當然要歸功於但是! – ThzChz

+0

不客氣。 – BalusC

相關問題