Dynamic method invocation in struts 2

The dynamic method invocation is used to avoid the separate action mapping for every action in case of dispatch action functionality. We are using wildcard method to achieve dynamic method invocation.

Example:

test.jsp

<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
	<head>
		<title>Struts 2 dynamic method invocation example</title>
	</head>
	<body>
		<h3>This is a dynamic method invocation example.</h3>
 
		<s:form action="Test">
			<s:submit value="Submit"/>
			<s:submit value="Show" action="showTest"/>
		</s:form>
 
	</body>
</html>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	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_2_5.xsd">
 
 
 	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>
        	org.apache.struts2.dispatcher.ng.
        	filter.StrutsPrepareAndExecuteFilter
        </filter-class>
	</filter>
 
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
 
	<welcome-file-list>
	  <welcome-file>test.jsp</welcome-file>
	</welcome-file-list>
 
</web-app>

struts.xml

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
 
<struts>
 
	<package name="user" extends="struts-default">
		<action name="*Test" method="{1}"
                         class="com.w3schools.action.TestAction">
		    <result name="success">/welcome.jsp</result>
		</action>
	</package>
 
</struts>

TestAction.java

import com.opensymphony.xwork2.ActionSupport;
 
/**
 * This class is used as an action class.
 * @author w3schools
 */
public class TestAction extends ActionSupport {
	private String message;
 
	public String execute(){
		setMessage("execute method is called.");
		return SUCCESS;
	}
 
	public String show(){
		setMessage("show method is called.");
		return SUCCESS;
	}
 
	public String getMessage() {
		return message;
	}
 
	public void setMessage(String message) {
		this.message = message;
	}
 
}

welcome.jsp

<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
	<head>
		<title>Struts 2 dynamic method invocation example</title>
	</head>
	<body>
		<h3>This is a dynamic method invocation example.</h3>
 
		<s:property value="message" />
 
	</body>
</html>

Output:

struts 27 first
 
When click on Submit button.
struts 27 second
 
When click on Show button.
struts 27 final
 
Download this example.
 
Next Topic: Struts 2 UI tags with example.
Previous Topic: DispatchAction Functionality in Struts 2 with example.