We continue with part two of Chapter 2 of Introduction JavaServer Faces Programming, by Budi Kurniawan (McGraw-Hill/Osborne, ISBN 0-07-222983-7, 2004). This section deals with the ActionListener and Component Tree, as well as validation and navigation for your JSP pages. This chapter prepares you for the next chapters by introducing the JSF Application Programming Interface (API) and the Application Configuration file.
Writing the ActionListener for the Listener and Component Tree Example
The ActionListener for the command button is the most interesting part of this JSF application. It demonstrates how an event causes a listener to be executed. The listener simply prints messages to the console. However, it shows important information such as the hierarchy of the component tree of the JSP page from which the event was fired and the component that triggered the event. The ActionListener is shown in Listing 5.
Listing 5The ActionListener for the Command Button(MyActionListener.java)
public class MyActionListener implements ActionListener {
public PhaseId getPhaseId() { System.out.println("getPhaseId called"); return PhaseId.APPLY_REQUEST_VALUES; }
public void processAction(ActionEvent event) { System.out.println("processAction called"); // the component that triggered the action event UIComponent component = event.getComponent(); System.out.println( "The id of the component that fired the action event: " + component.getComponentId()); // the action command String actionCommand = event.getActionCommand() System.out.println("Action command: " + actionCommand);
FacesContext facesContext = FacesContext.getCurrentInstance(); Tree tree = facesContext.getTree(); UIComponent root = tree.getRoot(); System.out.println("----------- Component Tree ------------"); navigateComponentTree(root, 0); System.out.println("----------------------------------------"); }
private void navigateComponentTree( UIComponent component, int level){ // indent for (int i=0; i<level; i++) System.out.print(" "); // print component id System.out.println(component.getComponentId()); Iterator children = component.getChildren(); // navigate children while (children.hasNext()) { UIComponent child = (UIComponent) children.next(); navigateComponentTree(child, level + 1); } } }
Remember: This is part one of the second chapter of JavaServer Faces Programming, by Budi Kurniawan (McGraw-Hill/Osborne, ISBN 0-07-222983). Stay tuned for more helpful chapters from McGraw-Hill/Osborne. Buy this book!