Action Event Listener
Action Listeners 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 event listeners.
1. Using "actionListener" attribute of the component tag
<h:commandButton id="cb1" value="#{ActionBean.buttonText}" immediate="true" actionListener="#{ActionBean.processMyAction}"/> |
Sample Code for processMyAction method in "ActionBean":
/*Action listener method*/ public void processMyAction(ActionEvent event){ disable = !disable; System.out.println("disable: "+ disable); if(buttonText.equals("Disable")){ buttonText = "Enable"; System.out.println("buttonText: "+ buttonText); } else{ buttonText = "Disable"; System.out.println("buttonText: "+ buttonText); } } |
2. Using <f:actionListener /> tag
The ActionListener interface must be implemented to capture an ActionEvent. This interface provides processAction() method which is called when the ActionEvent for which the ActionListener is registered occurs. So processAction() method should be implemented for the action event listeners.
processAction method signature:
public void processAction(ActionEvent event) throws AbortProcessingException |
For Example:(In JSP)
<h:commandLink id="France" immediate="true" value="Set
Locale(France)"> <f:actionListener type="roseindia.MyActionBean" /> </h:commandLink> |
The code for MyActionBean.java:
package roseindia; import java.util.*; import javax.faces.event.*; import javax.faces.context.FacesContext; public class MyActionBean extends Object implements ActionListener { public void processAction(ActionEvent event) throws AbortProcessingException{ Map locales = null; locales = new HashMap(); locales.put("America", new Locale("en", "US")); locales.put("France", new Locale("fr", "FR")); String current = event.getComponent().getId(); FacesContext context = FacesContext.getCurrentInstance(); context.getViewRoot().setLocale((Locale) locales.get(current)); } } |