Action中的execute()方法是默认方法,在执行时被自动调用。但也允许在Action中自定义方法。可以在Action中自定义多个方法,分别处理不同的逻辑。当Action 中使用了自定义方法,该Action 就需要特定的配置,一般有四种调用方式:
(1)使用struts.xml 文件中的method属性;
(2)使用动态方法调用方式(DMI);
(3)使用提交按钮的method属性;
(4)使用通配符配置Action;
介绍这四种方式之前,先给出一个Action类,下面的介绍均用该类进行说明。
package cn.edu.zjut.action;
import com.opensymphony.xwork2.ActionSupport;
import cn.edu.zjut.service.UserService;
import cn.edu.zjut.bean.UserBean;
public class UserAction extends ActionSupport{
private UserBean loginUser;
......//省略getters和setters方法
public String login() {
UserService userServ = new UserService();
if (userServ.login(loginUser)) {
return "loginSuccess";
}
else {
return "loginFail";
}
}
public String register() {
UserService userServ = new UserService();
if (userServ.register(loginUser)) {
return "registerSuccess";
}
return "registerFail";
}
}
一、使用struts.xml文件中的method属性
在struts.xml文件中配置多个Action,一个方法对应一个Action,将每个Action标签的method属性值改为要调用的方法名。
<action name="login" class="cn.edu.zjut.action.UserAction" method="login">
<result name="loginSuccess">/loginSuccess.jsp</result>
<result name="loginFail">/login.jsp</result>
</action>
<action name="register" class="cn.edu.zjut.action.UserAction" method="register">
<result name="registerSuccess">/regSuccess.jsp</result>
<result name="registerFail">/regFail.jsp</result>
</action>
二、使用动态方法调用方式(DMI)
在struts.xml文件中只配置一个Action,不指定method属性值,要调用的方法名在访问url中给出。
1)在struts.xml中开启DMI:
加入语句:
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
2)Struts.xml中的Action配置:
<package name="strutsBean" extends="struts-default" namespace="/">
<action name="user" class="cn.edu.zjut.action.UserAction">
<result name="loginSuccess">/loginSuccess.jsp</result>
<result name="loginFail">/loginFail.jsp</result>
<result name="registerSuccess">/regSuccess.jsp</result>
<result name="registerFail">/regFail.jsp</result>
</action>
</package>
3)访问url(2种方式):
①在浏览器中输入:
http://localhost:8080/struts-prj/user!login?loginUser.account=admin&loginUser.password=admin
(其中user为Action名,!后面的login是要调用的方法名,?后面是请求参数,分别表示用户名和密码。)
②修改表单的的action属性值:
登录页面form表单改为`
<s:form action="user!login" method="post">`
注册页面form表单改为`
<s:form action="user!register" method="post">·`
(user为Action名,!后面的login和register是要调用的方法名。)
三、使用提交按钮的method属性
将提交按钮的method属性设置为要调用的方法名。Struts.xml中只需配置一个Action。
登录页面的提交按钮为:
<s:submit value="登录" method="login"/>
注册页面的提交按钮为:
<s:submit value="注册" method="register" />
四、使用通配符配置Action
用*表示任意字符,如user_*表示任何以user开头的字符串,将Action的name值改为“user_*”,表示该Action能匹配任何以“user_”开头的Action请求。同时将method属性设置为“{1}”,表示要调用的方法由第一个*指定。
因此,可以通过在form表单的action属性值中将*替换为不同的方法名,达到访问不同方法的目的。
该方式也只需配置一个Action。
Struts.xml中Action的配置:
<action name="user_*" class="cn.edu.zjut.action.UserAction" method="{1}">
登录页面的form表单:
`<s:form action="user_login" method="post">`
注册页面的form表单:
<s:form action="user_register" method="post">·