valueChangeListener et ajax ordre d'exécution problème sur selectOneMenu

Je suis actuellement confronté à un des phénomènes étranges, où la définition de la valeur pour le modèle qui se passe avant l'exécution de valueChangeListener.

Fondamentalement, ce que je voudrais arriver, c'est :

  1. - Je changer le menu select
  2. La nouvelle valeur sont soumis à l'aide d'Ajax pour mettre à jour le myBean (à l'aide de f:ajax)
  3. Exécuter une requête basée sur la nouvelle saisie de la valeur (à l'aide de valueChangeListener)
  4. Rendu de la table basée sur le résultat de la dernière requête

Mais ce qui se passe quand je lance c'est dans cet ordre, 1 - 3 - 2 - 4 (pas 1 - 2 - 3 - 4 comme je l'imaginais)

Voici la partie de l'INTERFACE utilisateur :

<h:selectOneMenu label="budget" id="budget"
    converter="genericConverter"
    value="#{myBean.budget}" 
    valueChangeListener="#{myBean.actionSearch}">

    <f:ajax render="myGrid" />
    <f:selectItem itemLabel="Choose one .." noSelectionOption="true" />

    <f:selectItems ... />
</h:selectOneMenu>

Et c'est l'extrait de la fève :

public void actionSearch() {
    System.out.println("searching with this.budget == " + this.budget);
    ...
}
public void setBudget(String budget) {
    System.out.println("setting budget : " + budget);
    this.budget = budget;
}

Et c'est la sortie :

searching with this.budget == xxxx
setting budget : yyyy

Ce que je voudrais, c'est, d'établissement du budget, d'abord à partir de la nouvelle valeur sélectionnée dans l'INTERFACE utilisateur, puis de lancer la recherche basée sur la nouvelle INTERFACE utilisateur. Mais je ne sais pas comment faire pour y parvenir.

Et im en utilisant Tomcat 7 avec ces :

<dependency>
    <groupId>org.primefaces</groupId>
    <artifactId>primefaces</artifactId>
    <version>2.2.1</version>
</dependency>
<dependency>
    <groupId>com.sun.faces</groupId>
    <artifactId>jsf-api</artifactId>
    <version>2.0.4-b09</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>com.sun.faces</groupId>
    <artifactId>jsf-impl</artifactId>
    <version>2.0.4-b09</version>
    <scope>compile</scope>
</dependency>

Je me demande ce que j'ai fait de mal ?

Merci !

InformationsquelleAutor bertie | 2011-04-18