2009-03-24 22 views
0

Le problème se produit avec ce code:JSF f: selectItem dans h: selectManyCheckbox ne fonctionne pas dans la sauvegarde de haricots, mais il est affiché correctement dans h: 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> 

Comme on peut le voir, j'ai la valeur = "# {filterListener.chosenFilters} ". La valeur de dataTable est également la même, donc à chaque fois que je clique sur un des éléments de selectItem, le dataTable a un élément ajouté ou supprimé (cela fonctionne). Dans mon backing bean je le code suivant:

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

Chaque fois que je clique sur l'une des cases à cocher, est ajouté/supprimé une colonne avec les données appropriées, dans ma console, je reçois le message « processValueChange appelé » comme sortie I dans la méthode processValueChange, mais pendant ce temps chosenFilters est toujours nul, et l'expression if n'est jamais exécutée. Comment venir? C'est un bean de session, et je ne comprends vraiment pas pourquoi ma liste ne peut pas être employée dans le bean de support, mais est employée sans problème par mon dataTable.

Nous vous remercions de votre attention.

Répondre

0

Le problème est probablement sur ce tag:

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

Vous instruisez la balise f:valueChangeListener pour créer une nouvelle instance de requestFilterListener au lieu de se lier à celui spécifié par la configuration du bean géré. Utilisez l'attribut de liaison pour lier à # {filterListener}.