JSF - actionListener

Advertisements


When user interacts with components, such as h:commandButton or h:link, the JSF fires a action events which can be handled in two ways.

TechniqueDescription
Method BindingPass the name of the managed bean method in actionListener attribute of UI Component.
ActionListenerImplement ActionListener interface and pass the implementation class name to actionListener attribute of UI Component.

Method Binding

Define a method

public void updateData(ActionEvent e){
   data="Hello World";
}

Use above method

<h:commandButton id="submitButton" 
   value="Submit" action="#{userData.showResult}"
   actionListener="#{userData.updateData}" />
</h:commandButton>

ActionListener

Implement ActionListener

public class UserActionListener implements ActionListener{
   @Override
   public void processAction(ActionEvent arg0)
   throws AbortProcessingException {
      //access userData bean directly
      UserData userData = (UserData) FacesContext.getCurrentInstance().
         getExternalContext().getSessionMap().get("userData"); 
      userData.setData("Hello World");
   }
}

Use listener method

<h:commandButton id="submitButton1" 
   value="Submit" action="#{userData.showResult}" >
   <f:actionListener type="com.tutorialspoint.test.UserActionListener" />
</h:commandButton>

Example Application

Let us create a test JSF application to test the actionListener in JSF.

StepDescription
1Create a project with a name helloworld under a package com.tutorialspoint.test as explained in the JSF - First Application chapter.
2Modify UserData.java file as explained below.
3Create UserActionListener.java file under a package com.tutorialspoint.test.Modify it as explained below
4Modify home.xhtml as explained below. Keep rest of the files unchanged.
5Modify result.xhtml as explained below. Keep rest of the files unchanged.
6Compile and run the application to make sure business logic is working as per the requirements.
7Finally, build the application in the form of war file and deploy it in Apache Tomcat Webserver.
8Launch your web application using appropriate URL as explained below in the last step.

UserData.java

package com.tutorialspoint.test;

import java.io.Serializable;
import java.util.LinkedHashMap;
import java.util.Map;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ValueChangeEvent;

@ManagedBean(name = "userData", eager = true)
@SessionScoped
public class UserData implements Serializable {

private static final long serialVersionUID = 1L;

   private static Map<String,String> countryMap;
   private String data = "sample data";
	
   public String showResult(){
      return "result";
   }

   public void updateData(ActionEvent e){
      data="Hello World";
   }

   public String getData() {
      return data;
   }

   public void setData(String data) {
      this.data = data;
   }
}

UserActionListener.java

package com.tutorialspoint.test;

import javax.faces.context.FacesContext;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.ActionEvent;
import javax.faces.event.ActionListener;

public class UserActionListener implements ActionListener{
   @Override
   public void processAction(ActionEvent arg0) 
   throws AbortProcessingException {
      //access userData bean directly
      UserData userData = (UserData) FacesContext.getCurrentInstance().
         getExternalContext().getSessionMap().get("userData"); 
      userData.setData("Hello World");
   }
}

home.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html 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>JSF tutorial</title>		   
   </h:head>
   <h:body> 
      <h2>actionListener Examples</h2>
      <h:form>
      <h2>Method Binding</h2>
      <hr/>
      <h:commandButton id="submitButton" 
         value="Submit" action="#{userData.showResult}"
         actionListener="#{userData.updateData}" />
      </h:commandButton>
      <h2>ActionListener interface</h2>
      <hr/>
      <h:commandButton id="submitButton1" 
         value="Submit" action="#{userData.showResult}" >
         <f:actionListener 
            type="com.tutorialspoint.test.UserActionListener" />
      </h:commandButton>
      </h:form>
    </h:body>
</html>

result.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
   xmlns:f="http://java.sun.com/jsf/core"    
   xmlns:h="http://java.sun.com/jsf/html">
   <h:head>
   <title>JSF Tutorial!</title>   
   </h:head>
   <h:body>
   <h2>Result</h2>
   <hr />
   #{userData.data}
   </h:body>
</html>  

Once you are ready with all the changes done, let us compile and run the application as we did in JSF - First Application chapter. If everything is fine with your application, this will produce following result:

JSF actionListener result

Click on any submit button. You will see the following result.

JSF actionListener result1

Advertisements
Advertisements