2009-08-11 8 views
2

J'ai plusieurs menus déroulants avec mon application JSF/ICEFaces qui se mettent à jour les uns les autres en fonction de la sélection du contenu des autres mises à jour.ice: selectOneMenu envoie la mauvaise valeur

Le problème est que le menu envoie la mauvaise valeur. Il semble qu'il envoie la valeur avant au lieu de l'actuel! pas certain de pourquoi!

Des idées?

Merci,

Tam

<td> 
    <ice:selectOneMenu id="selectCurApplNm" 
     value="#{statsDisplayAndFilter.applIDFilterPhrase}" 
     disabled="#{statsDisplayAndFilter.disableCurrentApplIdNamesMenu}" 
     valueChangeListener="#{statsDisplayAndFilter.fetchEventNames}" 
     partialSubmit="true" immediate="true"> 
     <f:selectItem itemValue="" itemLabel="" /> 
     <f:selectItem itemValue="all" itemLabel="all" /> 
     <f:selectItems id="selectCurApplNmItems" 
     value="#{statsDisplayAndFilter.currentApplIdItems}" /> 
    </ice:selectOneMenu> 
    </td> 
</tr> 
<tr> 
    <td> 
    <ice:outputLabel for="SlctCompTyp" value="Event Name: " /> 
    </td> 
    <td> 
    <ice:selectOneMenu id="SlctCompTyp" 
     value="#{statsDisplayAndFilter.eventNameFilterPhrase}" 
     disabled="#{statsDisplayAndFilter.disableEventNamesMenu}" 
     valueChangeListener="#{statsDisplayAndFilter.fetchMethodNames}" 
     partialSubmit="true" immediate="true"> 
     <f:selectItem itemValue="" itemLabel="" /> 
     <f:selectItem itemValue="all" itemLabel="all" /> 
     <f:selectItems id="SlctcompTypeItms" 
     value="#{statsDisplayAndFilter.eventNameItems}" /> 
    </ice:selectOneMenu> 
    </td> 
</tr> 

Répondre

1

Je trouve que par le temps qu'il appelle la méthode définie dans valueChangeListener la valeur est pas encore binded à la variable appropriée, donc je devais utiliser la variable d'événement pour obtenir la nouvelle valeur:

public void fetchEventNames(ValueChangeEvent e) throws SQLException{ 
    String filteringOptions = ""; 
    String newSelectedValue = e.getNewValue().toString(); 
     ..... 

Et cela résolu le problème

+1

les REAS C'est pour le mot clé "immédiat". Cela ignore certaines phases du cycle de vie JSF et déclenche l'événement * avant que les valeurs * soient réécrites depuis l'interface utilisateur vers le modèle. –

Questions connexes