2009-03-24 11 views
0

Das Problem mit diesem Code auftritt:JSF f: selectItem in h: Arbeits selectManyCheckbox nicht Bohne in der Sicherung, aber richtig in h angezeigt: Datatable

<h:form> 
    <rich:panel> 
     <f:facet name="header"> 
      <h:selectManyCheckbox title="Select which types of requests you want to see" 
            onchange="submit();" value="#{filterListener.chosenFilters}" 
            id="selectBoxContainer" > 
       <f:selectItem id="approvedByITS" itemLabel="Approved by ITS" itemValue="approvedByITS" /> 
       <f:selectItem id="approvedByPO" itemLabel="Approved by Process Owner" itemValue="approvedByPO" /> 
       <f:selectItem id="dob" itemLabel="Date" itemValue="dob" /> 
       <f:selectItem id="externalAssignedTo" itemLabel="External assigned" itemValue="externalAssignedTo" /> 
       <f:selectItem id="internalAssignedTo" itemLabel="Internal assigned" itemValue="internalAssignedTo" /> 
       <f:selectItem id="ITSapprovedBy" itemLabel="ITS approved by" itemValue="ITSapprovedBy" /> 
       <f:selectItem id="severity" itemLabel="Severity" itemValue="severity" /> 
       <f:selectItem id="status" itemLabel="status" itemValue="status" /> 
       <f:valueChangeListener type="no.ngt.tech.rt2.listeners.requestFilterListener" /> 
      </h:selectManyCheckbox> 
     </f:facet> 

     <h:dataTable value="#{filterListener.chosenFilters}" var="selects" > 
      <h:column> 
       <h:outputText value="#{selects}" /> 
      </h:column> 
     </h:dataTable> 
     <br /> 
     <h:messages /> 

    </rich:panel> 
</h:form> 

Wie wir sehen können ich den Wert = "# {filterListener.chosenFilters} ". Der Wert von dataTable ist auch derselbe. Wenn ich also auf eines der selectItems klicke, wird der dataTable ein Element hinzugefügt oder entfernt (das funktioniert). In meinem Backing Bean ich den folgenden Code haben:

public class requestFilterListener implements ValueChangeListener { 

    private List<String> chosenFilters; 

    public requestFilterListener() { 
    } 

    public void processValueChange(ValueChangeEvent event) { 
     System.out.println("processValueChange called"); 
     if (chosenFilters != null) { 
      System.out.println(chosenFilters.size()); 
     } 
    } 

    public List<String> getChosenFilters() { 
     return chosenFilters; 
    } 

    public void setChosenFilters(List<String> chosenFilters) { 
     this.chosenFilters = chosenFilters; 
    } 

Jedesmal, wenn ich eines der Kontrollkästchen klicken, wird eine Spalte hinzugefügt wird/mit den richtigen Daten entfernt, in meiner Konsole erhalte ich die Meldung „processValueChange genannt“ als I-Ausgang in der processValueChange-Methode, aber während dieser Zeit ist selectedFilters immer null und der if-Ausdruck wird nie ausgeführt. Woher? Dies ist eine Session-Bean, und ich verstehe wirklich nicht, warum meine Liste nicht innerhalb der Backing-Bean verwendet werden kann, sondern von meiner DataTable ohne Probleme verwendet wird.

Vielen Dank für Ihre Zeit in diesem zu suchen.

Antwort

0

Das Problem ist wahrscheinlich auf diesem tag:

<f:valueChangeListener type="no.ngt.tech.rt2.listeners.requestFilterListener" /> 

Sie anweist, den f:valueChangeListener Tag eine neue Instanz von requestFilterListener erstellen statt dem einen der Bindung durch die Managed Bean-Konfiguration angegeben. Verwenden Sie das bindende Attribut, um an # {filterListener} zu binden.