Exemple JSF 2 valueChangeListener

Exemple de valeur JSF 2 valueChangeListener

Lorsque l'utilisateur apporte des modifications aux composants d'entrée, tels queh:inputText ouh:selectOneMenu, le JSF «value change event» sera déclenché.

Deux façons de le mettre en œuvre:

1. Method binding - Dans le composant d'entrée, a spécifié la méthode d'un bean directement dans l'attribut «valueChangeListener».
JSF…


    

Java…
La méthode qui interagit avec l'événement de changement de valeur doit accepter un paramètreValueChangeEvent.

@ManagedBean(name="bean")
@SessionScoped
public class BeanBean{

    public void valueChangeMethod(ValueChangeEvent e){
        //...
    }

}

2. ValueChangeListener interface - Dans le composant d'entrée, ajoutez une balise «f:valueChangeListener» à l'intérieur et spécifiez une classe d'implémentation de l'interface ValueChangeListener.
JSF…


    
    

Java…
Implémente l'interfaceValueChangeListener et remplace la méthodeprocessValueChange().

public class ValueListenerXXX implements ValueChangeListener{

    @Override
    public void processValueChange(ValueChangeEvent event)
            throws AbortProcessingException {

        //...

    }
}

Note
Pour le faire fonctionner, vous devez attacher un code JavaScriptonchange=”submit()” au composant d'entrée; Sinon, aucun événement ne sera déclenché.

Exemple complet de valueChangeListener

Voici une application JSF 2.0, avec une liste déroulante (h:selectOneMenu) et une zone de texte (h:inputText), lorsque l'utilisateur apportera des modifications dans la liste déroulante, il déclenchera «l'événement de changement de valeur» et mettra à jour la zone de texte avec valeur de la liste déroulante nouvellement sélectionnée.

Cet exemple est démontré à la fois de manière «Method binding» et «ValueChangeListener».

1. Liaison de méthode

Un bean pays pour fournir une liste des pays et du code local pour la démonstration. Vous pouvez lier la méthode du bean via l’attribut «valueChangeListener» dans le composant d’entrée. Voir ci-dessous :

CountryBean.java

package com.example;

import java.io.Serializable;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ValueChangeEvent;

@ManagedBean(name="country")
@SessionScoped
public class CountryBean implements Serializable{

    private static final long serialVersionUID = 1L;

    private static Map countries;

    private String localeCode = "en"; //default value

    static{
        countries = new LinkedHashMap();
        countries.put("United Kingdom", "en"); //label, value
        countries.put("French", "fr");
        countries.put("German", "de");
        countries.put("China", "zh_CN");
    }

    public void countryLocaleCodeChanged(ValueChangeEvent e){
        //assign new value to localeCode
        localeCode = e.getNewValue().toString();

    }

    public Map getCountryInMap() {
        return this.countries;
    }

    public String getLocaleCode() {
        return localeCode;
    }

    public void setLocaleCode(String localeCode) {
        this.localeCode = localeCode;
    }

}

Page JSF




    

        

JSF 2 valueChangeListener example

Selected country : Select a country {method binding}:

2. Interface ValueChangeListener

Réutilisez le bean pays ci-dessus pour fournir une liste des pays et du code de paramètres régionaux. Implémente l'interfaceValueChangeListener et la lie via la balise «f:valueChangeListener». Voir ci-dessous :

CountryValueListener.java

package com.example;

import javax.faces.context.FacesContext;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.ValueChangeEvent;
import javax.faces.event.ValueChangeListener;

public class CountryValueListener implements ValueChangeListener{

    @Override
    public void processValueChange(ValueChangeEvent event)
            throws AbortProcessingException {

        //access country bean directly
        CountryBean country = (CountryBean) FacesContext.getCurrentInstance().
            getExternalContext().getSessionMap().get("country");

        country.setLocaleCode(event.getNewValue().toString());

    }

}

Page JSF




    

        

JSF 2 valueChangeListener example

Selected country : Select a country {ValueChangeListener class}:

Demo

Par défaut, le pays «Royaume-Uni» est sélectionné.

jsf2-ValueChangeListener-example-1

Si la valeur de la liste déroulante du pays est modifiée, déclenchezvalueChangeListener et mettez à jour la valeur de la zone de texte avec la nouvelle valeur de la zone de liste déroulante sélectionnée.

jsf2-ValueChangeListener-example-2

Télécharger le code source

Téléchargez-le -JSF-2-ValueChangeListener-Example.zip (10 Ko)