JSF 2 ValueChangeListener Attribute and Class Example
January 20, 2015
In this page, we will learn ValueChangeListener attribute and class Example in JSF 2. ValueChangeListener can be registered with component to listen the value change in input field or selection box. When using as an attribute, we need to use managed bean method and when using as a class, we need to create a class and use tag f:valueChangeListener inside input field tag.
ValueChangeListener as an Attribute
To use ValueChangeListener as an attribute we have to create a method in managed bean whose argument will be ValueChangeEvent. Use valueChangeListener attribute in input field or selection box.Method in Managed Bean with ValueChangeEvent Argument
Create a method which be called on value chaged.public void selectionChanged(ValueChangeEvent e){ studentName = e.getNewValue().toString(); }
UI with valueChangeListener Attribute
For a selection box, valueChangeListener attribute will be used as below. Assign the managed bean method name to the valueChangeListener.<h:selectOneMenu value="#{studentBean.studentName}" onchange="submit()" valueChangeListener="#{studentBean.selectionChanged}"> <f:selectItems value="#{studentBean.students}" /> </h:selectOneMenu>
ValueChangeListener as a Class
To use ValueChangeListener as a class we need to create a class which will implement ValueChangeListener interface. Then use <f:valueChangeListener/> tag.Create a Listener Class Implementing ValueChangeListener
We need to create a listener class which will implement ValueChangeListener. Override the method as belowpublic void processValueChange(ValueChangeEvent event) throws AbortProcessingException { StudentBean studentBean = (StudentBean)FacesContext.getCurrentInstance(). getExternalContext().getRequestMap().get("studentBean"); studentBean.setStudentName(event.getNewValue().toString()); }
UI with f:valueChangeListener Tag
To use ValueChangeListener class in UI, use tag as below<h:selectOneMenu value="#{studentBean.studentName}" onchange="submit()"> <f:valueChangeListener type="com.concretepage.StudentSelectionChangeListener" /> <f:selectItems value="#{studentBean.students}" /> </h:selectOneMenu>
Complete Example for ValueChangeListener
Now find the complete example of ValueChangeListener attribute and class. In the example we have a selection box for selecting student. The selected student will be displayed.Project Structure in Eclipse
Find the project structure in eclipse.
Managed Bean
Find the managed bean used in the example.StudentBean.java
package com.concretepage; import java.util.LinkedHashMap; import java.util.Map; import javax.faces.bean.ManagedBean; import javax.faces.bean.RequestScoped; import javax.faces.event.ValueChangeEvent; @ManagedBean(name = "studentBean", eager = true) @RequestScoped public class StudentBean { private String studentName ="Ram"; private Map<String, String> studentMap = new LinkedHashMap<String, String>(); { studentMap.put("student-1", "Ram"); studentMap.put("student-2", "Shyam"); studentMap.put("student-3", "Mohan"); } public Map<String, String> getStudents(){ return studentMap; } public void selectionChanged(ValueChangeEvent e){ studentName = e.getNewValue().toString(); } public String getStudentName() { return studentName; } public void setStudentName(String studentName) { this.studentName = studentName; } }
Implementation of ValueChangeListener Interface
Find the class which is implementing the ValueChangeListener interface.StudentSelectionChangeListener.java
package com.concretepage; import javax.faces.context.FacesContext; import javax.faces.event.AbortProcessingException; import javax.faces.event.ValueChangeEvent; import javax.faces.event.ValueChangeListener; public class StudentSelectionChangeListener implements ValueChangeListener { @Override public void processValueChange(ValueChangeEvent event) throws AbortProcessingException { StudentBean studentBean = (StudentBean)FacesContext.getCurrentInstance(). getExternalContext().getRequestMap().get("studentBean"); studentBean.setStudentName(event.getNewValue().toString()); } }
XHTML for UI
Find the UI for valueChangeListener attribute.eventwithmethod.xhtml
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"> <h:head> <title>ValueChangeEvent with Method in JSF 2</title> </h:head> <h:body> <h3>ValueChangeEvent with Method in JSF 2</h3> <h:form id="studentForm"> <h:outputLabel value="Selected Student Name:" /> <h:outputLabel value="#{studentBean.studentName}" /><br/><br/> <h:outputLabel value="Select Student:" /> <h:selectOneMenu value="#{studentBean.studentName}" onchange="submit()" valueChangeListener="#{studentBean.selectionChanged}"> <f:selectItems value="#{studentBean.students}" /> </h:selectOneMenu> </h:form> </h:body> </html>
eventwithclass.xhtml
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"> <h:head> <title>ValueChangeEvent with Class in JSF 2</title> </h:head> <h:body> <h3>ValueChangeEvent with Class in JSF 2</h3> <h:form id="studentForm"> <h:outputLabel value="Selected Student Name:" /> <h:outputLabel value="#{studentBean.studentName}" /><br/><br/> <h:outputLabel value="Select Student:" /> <h:selectOneMenu value="#{studentBean.studentName}" onchange="submit()"> <f:valueChangeListener type="com.concretepage.StudentSelectionChangeListener" /> <f:selectItems value="#{studentBean.students}" /> </h:selectOneMenu> </h:form> </h:body>