2011-10-06 11 views
5

मैं एक ही बटन के साथ विभिन्न प्रबंधित बीन्स पर एक से अधिक क्रियाएं करना चाहता हूं, एक स्कोप्ड सत्र और दूसरा अनुरोध। मेरे उदाहरण में मैं दोनों के लिए एक ही बीन का उपयोग करता हूं।सत्र स्कोप्ड प्रबंधित बीन और एक्शन लिस्टर

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; 
    } 
} 

जब मैं बटन 1001 के बजाय 1 से गिनती बढ़ जाती है, प्रेस, और एक नया सेम पैदा करता है। मैंने गलत क्या किया ?

धन्यवाद।

उत्तर

7

यह अपेक्षित व्यवहार है। <f:actionListener type> प्रत्येक घोषणा पर अपना स्वयं का बीन उदाहरण बनाता है और प्राप्त करता है। यह जेएसएफ द्वारा प्रबंधित एक ही सत्र स्कॉप्ड बीन का पुन: उपयोग नहीं करता है।

आपको पहले से बनाए गए सत्र स्कोप्ड बीन उदाहरण से जुड़ने के बजाय binding का उपयोग करने की आवश्यकता है।

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

लेकिन निश्चित रूप से, धन्यवाद! – ThzChz

+0

आपका स्वागत है। – BalusC

संबंधित मुद्दे