Beispiel für JSF 2 valueChangeListener

JSF 2 valueChangeListener Beispiel

Wenn Benutzer Änderungen an Eingabekomponenten vornehmen, z. B.h:inputText oderh:selectOneMenu, wird die JSF "value change event" ausgelöst.

Zwei Möglichkeiten zur Implementierung:

1. Method binding - Geben Sie in der Eingabekomponente die Methode einer Bean direkt im Attribut "valueChangeListener" an.
JSF…


    

Java…
Die Methode, die mit dem Wertänderungsereignis interagiert, sollte einenValueChangeEvent-Parameter akzeptieren.

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

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

}

2. ValueChangeListener interface - Fügen Sie in der Eingabekomponente ein "f:valueChangeListener" -Tag hinzu und geben Sie eine Implementierungsklasse der ValueChangeListener-Schnittstelle an.
JSF…


    
    

Java…
Implementiert dieValueChangeListener-Schnittstelle und überschreibt dieprocessValueChange()-Methode.

public class ValueListenerXXX implements ValueChangeListener{

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

        //...

    }
}

Note
Damit es funktioniert, müssen Sie der Eingabekomponente einonchange=”submit()” JavaScript hinzufügen. Andernfalls wird kein Ereignis ausgelöst.

Vollständiges valueChangeListener-Beispiel

Hier ist eine JSF 2.0-Anwendung mit einer Dropdown-Box (h:selectOneMenu) und einer Textbox (h:inputText). Wenn Benutzer Änderungen in der Dropdown-Box vornehmen, wird das "Wertänderungsereignis" ausgelöst und das Textfeld mit aktualisiert neu ausgewählter Dropdown-Feldwert.

Dieses Beispiel wird sowohl auf "Method binding" als auch auf "ValueChangeListener" demonstriert.

1. Methodenbindung

Eine Country-Bean, die eine Liste der Länder und den Gebietsschemacode zur Demonstration bereitstellt. Sie können die Bean-Methode über das Attribut "valueChangeListener" in der Eingabekomponente binden. Siehe unten :

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

}

JSF Seite



    

        

JSF 2 valueChangeListener example

Selected country : Select a country {method binding}:

2. ValueChangeListener-Schnittstelle

Verwenden Sie die obigen Länderbohnen erneut, um eine Liste der Länder und des Gebietsschemacodes bereitzustellen. Implementiert dieValueChangeListener-Schnittstelle und bindet sie über das Tag "f:valueChangeListener". Siehe unten :

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());

    }

}

JSF Seite



    

        

JSF 2 valueChangeListener example

Selected country : Select a country {ValueChangeListener class}:

Demo

Standardmäßig ist das Land "Großbritannien" ausgewählt.

jsf2-ValueChangeListener-example-1

Wenn der Dropdown-Feldwert für das Land geändert wird, feuern SievalueChangeListener ab und aktualisieren Sie den Textfeldwert mit dem neu ausgewählten Dropdown-Feldwert.

jsf2-ValueChangeListener-example-2

Quellcode herunterladen

Laden Sie es herunter -JSF-2-ValueChangeListener-Example.zip (10 KB)