文章参考自:https://blog.youkuaiyun.com/Leafage_M/article/details/54577687
这位博主文章对动态action配置有更详细的介绍,需要的可以移步查看,此篇文章只是在第一次配置动态Action时失败了,通过博主的文章把问题解决了,因此记录一下配置过程
动态Action是通过Action对象中一个具体的方法来实现动态操作的。
Step 1
创建Java Web项目,将Struts 2的支持类库文件添加到library中,之后在web.xml文件中注册Struts 2提供的过滤器,具体可参看:https://blog.youkuaiyun.com/weixin_39663138/article/details/87630240
Step 2
要使用动态Action,需要在struts.xml中对其进行配置:
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
</struts>
只有value设置为真时,才能使用动态Action
Step 3
创建名称为UserAction的Action对象,在对象中编写add()和update()方法,用于处理添加用户信息的请求和更新用户信息的请求,并根据请求返回相应页面
package com.wyx.action;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private String info;
public String add() throws Exception{
info = "添加用户信息";
return "add";
}
public String update()throws Exception{
info = "更改用户信息";
return "update";
}
public String getInfo(){
return info;
}
public void setInfo(String info){
this.info = info;
}
}
Step 4
继续在struts.xml文件中配置UserAction
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<package name="hello" extends="struts-default">
<action name="userAction" class="com.wyx.action.UserAction">
<result name="add">user_add.jsp</result>
<result name="update">user_update.jsp</result>
</action>
</package>
</struts>
Step 5
创建user_add.jsp和user_update.jsp页面,用于返回相应请求的页面
user_add.jsp
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>add</title>
</head>
<body>
<font color="red">
<s:property value="info"/>
</font>
</body>
</html>
user_update.jsp
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>update</title>
</head>
<body>
<font color="red">
<s:property value="info"/>
</font>
</body>
</html>
创建index.jsp页面,添加两个超链接,通过Struts2的动态Action,将请求分别指向UserAction中添加用户信息和更新用户信息的请求
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<a href="userAction!add.action">添加用户</a><br>
<a href="userAction!update.action">更新用户</a>
</body>
</html>
注:上述调用的链接为userAction!add.action而不是userAction.action!add
Step 6
在Struts 2.5中,要支持动态Action访问的方法还需要继续配置struts.xml,在<allowed-methods>标签中进行描述,最后struts.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<package name="hello" extends="struts-default">
<action name="userAction" class="com.wyx.action.UserAction">
<result name="add">user_add.jsp</result>
<result name="update">user_update.jsp</result>
<allowed-methods>add,update</allowed-methods>
</action>
</package>
</struts>
上述配置之后就能运行测试,下面介绍另一种配置方法:
修改struts.xml为如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<package name="hello" extends="struts-default">
<action name="userAdd" class="com.wyx.action.UserAction" method="add">
<result name="add">user_add.jsp</result>
</action>
<action name="userUpdate" class="com.wyx.action.UserAction" method="update">
<result name="update">user_update.jsp</result>
</action>
</package>
</struts>
再修改index.jsp页面代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<a href="userAdd.action">添加用户</a><br>
<a href="userUpdate.action">更新用户</a>
</body>
</html>
两种配置运行之后为如下页面:
index.jsp
user_add.jsp
user_update.jsp