JSF fired action events when user clicks on a button or link component like h:commandButton or h:commandLink etc.
An action event can be handled by following ways:
1. Method Binding.
2. ActionListener Interface.
Method Binding:
Use the managed bean method directly into actionListener attribute of the corresponding JSF component.
Bean class:
@ManagedBean(name="testBean") @SessionScoped public class TestBean{ public void actionEventMethod(ActionEvent event){ //method body } } |
JSF component:
<h:commandButton id="submitButton" value="Submit" actionListener="#{ testBean.actionEventMethod}" > </h:commandButton> |
ActionListener Interface:
Creates a class which implements ActionListener interface and override the processAction() method. Pass it into f:actionListener tag of the corresponding JSF component.
Java class:
public class ActionListenerTestClass implements ActionListener { @Override public void processAction(ActionEvent event) throws AbortProcessingException { //method body } } |
JSF component:
<h:commandButton id="submitButton" value="Submit"> <f:actionListener type="ActionListenerTestClass" /> </h:commandButton> |
Example:
test.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 action listener example.</title> </h:head> <h:body> <h2>JSF action listener example.</h2> <h:form> Method Binding Test: <br/> <h:commandButton value="Submit" action="success" actionListener="#{test.messageChanged}"> </h:commandButton> <br/><br/> f:actionListener Test: <br/> <h:commandButton value="Submit" action="success" > <f:actionListener type="com.w3schools.business.ActionListenerTest" /> </h:commandButton> </h:form> </h:body> </html> |
Test.java
import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; import javax.faces.event.ActionEvent; /** * Managed bean. * @author w3schools */ @ManagedBean(name = "test") @SessionScoped public class Test { private String message = "Hello w3schools"; public void messageChanged(ActionEvent actionEvent) { message = "Action Listener Test " + "using method binding."; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } } |
ActionListenerTest.java
import javax.faces.context.FacesContext; import javax.faces.event.AbortProcessingException; import javax.faces.event.ActionEvent; import javax.faces.event.ActionListener; public class ActionListenerTest implements ActionListener { public void processAction(ActionEvent actionEvent) throws AbortProcessingException { Test test = (Test) FacesContext.getCurrentInstance(). getExternalContext().getSessionMap().get("test"); test.setMessage("Action Listener Test" + " using f:actionListener."); } } |
welcome.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 action listener example.</title> </h:head> <h:body> <h2>JSF action listener example.</h2> <h3><h:outputText value="#{test.message}"/></h3> </h:body> </html> |
faces-config.xml
<?xml version="1.0" encoding="windows-1252"?> <faces-config version="2.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"> <navigation-rule> <from-view-id>test.xhtml</from-view-id> <navigation-case> <from-outcome>success</from-outcome> <to-view-id>welcome.xhtml</to-view-id> </navigation-case> </navigation-rule> </faces-config> |
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <servlet> <servlet-name>faces</servlet-name> <servlet-class> javax.faces.webapp.FacesServlet <servlet-mapping> <servlet-name>faces</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping> </web-app> |
URL:
http://localhost:7001/JSFExample39/faces/test.xhtml
Output:
Click Submit button for Method binding.
Click Submit button for f:actionListener.
Download this example.