|
Download
FAQ History |
|
API
Search Feedback |
Implementing an Event Listener
As explained in Event and Listener Model, JavaServer Faces technology supports action events and value-change events.
Action events occur when the user activates a component that implements
ActionSource. These events are represented by thejavax.faces.event.ActionEventclass.Value-change events occur when the user changes the value of a
UIInputcomponent or a component whose class extendsUIInput. These events are represented by thejavax.faces.event.ValueChangeEventclass.One way to handle these events is to implement the appropriate listener classes. Listener classes that handle the action events in an application must implement
javax.faces.event.ActionListener. Similarly, listeners that handle the value-change events must implementjavax.faces.event.ValueChangeListener.This section explains how to implement the two listener classes.
If you need to handle events generated by custom components, you must implement an event handler and manually queue the event on the component as well as implement an event listener. See Handling Events for Custom Components for more information.
Note: You need not create an
ActionListenerto handle an event that results solely in navigating to a page and does not perform any other application-specific processing. See Writing a Method to Handle Navigation for information on how to manage page navigation.
Implementing Value-Change Listeners
A
ValueChangeListenerimplementation must include aprocessValueChange(ValueChangeEvent)method. This method processes the specifiedValueChangeEventand is invoked by the JavaServer Faces implementation when theValueChangeEventoccurs. TheValueChangeEventinstance stores the old and the new values of the component that fired the event.The
NameChangedlistener implementation is registered on thenameUIInputcomponent on thebookcashier.jsppage. This listener stores into session scope the name the user entered in the text field corresponding to thenamecomponent. When thebookreceipt.jsppage is loaded, it displays the first name inside the message:
"Thank you, {0} for purchasing your books from us."Here is part of the
NameChangedlistener implementation:... public class NameChanged extends Object implements ValueChangeListener { public void processValueChange(ValueChangeEvent event) throws AbortProcessingException { if (null != event.getNewValue()) { FacesContext.getCurrentInstance(). getExternalContext().getSessionMap(). put("name", event.getNewValue()); } } }When the user enters the name in the text field, a
ValueChangeEventis generated, and theprocessValueChange(ValueChangeEvent)method of thebookstore6/src/listeners/NameChangedlistener implementation is invoked. This method first gets the ID of the component that fired the event from theValueChangeEventobject. Next, it puts the value, along with an attribute name, into the session map of theFacesContext.Registering a ValueChangeListener on a Component explains how to register this listener onto a component.
Implementing Action Listeners
An
ActionListenerimplementation must include aprocessAction(ActionEvent)method.The
processAction(ActionEvent)processes the specifiedActionEventand is invoked by the JavaServer Faces implementation when theActionEventoccurs.The Duke's Bookstore application does not use any
ActionListenerimplementations. Instead, it uses method-binding expressions withactionListenerattributes to refer to backing bean methods that handle events. This section explains how to turn one of these methods into anActionListenerimplementation.The
chooselocale.jsppage allows the user to select a locale for the application by clicking on one of a set of hyperlinks. When the user clicks one of the hyperlinks, anActionEventis generated, and thechooseLocaleFromLink(ActionEvent)method ofbookstore6/src/backing/LocaleBeanis invoked. Instead of implementing a bean method to handle this event, you can create a listener implementation to handle it. To do this, you do the following:The listener implementation would look something like this:
... public class LocaleChangeListener extends Object implements ActionListener { private Map locales = null; public LocaleChangeListener() { locales = new HashMap(); locales.put("NAmerica", new Locale("en", "US")); locales.put("SAmerica", new Locale("es", "MX")); locales.put("Germany", new Locale("de", "DE")); locales.put("France", new Locale("fr", "FR")); } public void processAction(ActionEvent event) throws AbortProcessingException { String current = event.getComponent().getId(); FacesContext context = FacesContext.getCurrentInstance(); context.getViewRoot().setLocale((Locale) locales.get(current)); } }Registering an ActionListener on a Component explains how to register this listener onto a component.
|
Download
FAQ History |
|
API
Search Feedback |
All of the material in The J2EE(TM) 1.4 Tutorial is copyright-protected and may not be published in other works without express written permission from Sun Microsystems.