Value Change Event Listener

Value Change Listener can be implemented in 2 ways. If you use the first one then it will limit you to use only one listener for the component but second way permits you to include more than one listeners.

Value Change Event Listener

Value Change Event Listener

        

Value Change Listener  can be implemented in 2 ways. If you use the first one then it will limit you to use only one listener for the component but second way permits you to include more than one listeners.

1. Using "valueChangeListener" attribute of the component tag

<h:selectOneMenu id="songList" value="#{ValueChangeBean.selectedSong}" valueChangeListener="#{ValueChangeBean.processMyValueChange}" immediate="true" onchange="this.form.submit()">
  <f:selectItems value="#{ValueChangeBean.songList}"/>
</h:selectOneMenu>

Sample Code for processMyValueChange method in "ActionBean":

public void processMyValueChange(ValueChangeEvent vce){
   songvalue = (String) vce.getNewValue(); 
   setSongDetail((String)detail.get(songvalue));

   /*Render the response*/
   FacesContext.getCurrentInstance().renderResponse();
}

 

2. Using <f:valueChangeListener /> tag

The ValueChangeListener interface must be implemented to capture an ValueChangeEvent. This interface provides processValueChange() method which is called when the ValueChangeEvent action observed by this listener occurs. So processValueChange() method should be implemented for the value change event listeners.

processValueChange method signature:

public void processValueChange(ValueChangeEvent event) throws AbortProcessingException

For example:(In JSP)

<h:inputText id="name" immediate="true" onchange="this.form.submit()" required="true"> 
  <f:valueChangeListener type="roseindia.MyValueChangeBean" />
</h:inputText>

The code for MyValueChangeBean.java:

package roseindia;

import java.util.*;
import javax.faces.event.*;
import javax.faces.context.FacesContext;

public class MyValueChangeBean extends Object implements ValueChangeListener {
    public void processValueChange(ValueChangeEvent event) throws AbortProcessingException {  
  if (null != event.getNewValue()) {
   FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("name", event.getNewValue());
  }
   }
}

Download code for all examples