web-dev-qa-db-fra.com

Invoquer la méthode d'action au clic de h: selectOneMenu

J'ai la liste déroulante suivante:

<h:selectOneMenu value="#{user.favCoffee3}"  onclick="">
   <f:selectItems value="#{user.favCoffee3Value}" var="c"
   itemLabel="#{c.coffeeLabel}" itemValue="#{c.coffeeValue}" />
</h:selectOneMenu>

Je voudrais lancer une méthode à partir du haricot par liste déroulante élément de la liste. Comment puis-je y arriver?

13
user2459256

Vous pouvez utiliser l'attribut valueChangeListener, en pointant sur une méthode du bean géré et ajouter un submit() dans l'attribut onchange.

Le formulaire devrait ressembler à:

</h:form>
    <h:selectOneMenu valueChangeListener="#{bean.valueChanged}" 
                     onchange="submit()">
        <f:selectItem itemValue="1" itemLabel="First" />
        <f:selectItem itemValue="2" itemLabel="Second" />
    </h:selectOneMenu>
</h:form>

Et la méthode valueChangeListener dans le bean géré serait:

public void valueChanged(ValueChangeEvent event) {
    //do your stuff
}
18
Konstantin Yovkov

Dans le cadre de la boîte à outils JSF de base, vous pouvez utiliser la balise <f:ajax/> pour soumettre (à l'aide d'ajax) votre entrée sans avoir besoin d'une page complète d'envoi/d'actualisation. Utiliser votre exemple de code

  1. Définir la balise <f:ajax/> en tant qu'enfant du menu déroulant

    <h:selectOneMenu value="#{user.favCoffee3}"  onclick="">
       <f:selectItems value="#{user.favCoffee3Value}" var="c" itemLabel="#{c.coffeeLabel}" itemValue="#{c.coffeeValue}" />
       <f:ajax listener="#{user.doSomething}"/>
    </h:selectOneMenu>
    
  2. Définissez une méthode (doSomething() dans cet exemple) dans votre bean de support qui accepte une instance de AjaxBehaviorEvent

    public void doSomething(AjaxBehaviorEvent abe){
      //do what you want with your favCoffee3 variable here
    }
    

Lectures complémentaires:

3
kolossus

Semble travailler pour a4j: support . Votre h:selectOneMenu ressemblerait à ceci:

<h:selectOneMenu value="#{user.favCoffee3}">
    <f:selectItems value="#{user.favCoffee3Value}" var="c" itemLabel="#{c.coffeeLabel}" itemValue="#{c.coffeeValue}" />
    <a4j:support event="onchange" action="#{user.onSelectOneMenuChange}">
</h:selectOneMenu>

Vous devez également ajouter le taglib suivant:

<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
1
ssantos