在Struts2中动态方法调用有三种方式,动态方法调用就是为了解决一个Action对应多个请求的处理,以免Action太多。
1) 使用!+action方法名调用(官网不推荐使用)
需要在配置文件中加入动态方法调用为true
<constantname="struts.enable.DynamicMethodInvocation" value="true"/>
<a href=”userAction!login”></a>
2) 在action属性中指定method方法
3) 第三种方式:通配符方式(官网推荐使用)
首先得关闭开关
<constant name="struts.enable.DynamicMethodInvocation"value="false" />
action配置如下:
<action name="user_*" class="com.demo.action.UserAction"
method="{1}">
<result name="test">/test.jsp</result>
</action>
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="devMode" value="true"></constant>
<package name="demo" extends="struts-default">
<action name="userAction" class="com.demo.action.UserAction">
<result>/success.jsp</result>
</action>
<action name="login" class="com.demo.action.UserAction" method="login">
<result>/success.jsp</result>
</action>
<action name="register" class="com.demo.action.UserAction"
method="register">
<result>/success.jsp</result>
</action>
<action name="user_*" class="com.demo.action.UserAction"
method="{1}">
<result>/{1}.jsp</result>
</action>
</package>
</struts>
action
package com.demo.action;
import com.opensymphony.xwork2.Action;
public class UserAction implements Action {
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return null;
}
public String login() {
System.out.println("login..........");
return "success";
}
public String register() {
System.out.println("register..........");
return "success";
}
}
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<a href="userAction!login">login</a>
<a href="userAction!register">register</a>
<hr>
<a href="login">login</a>
<a href="register">register</a>
<hr>
<a href="user_login">login</a>
<a href="user_register">register</a>
</body>
</html>