在我们Struts2的请求中,一般都是前台提交请求到Action接收,但是以前的提交方式基本上都是一个请求对应一个Action,虽然这样职能单一了,但是问题却出来了,就比如我要开发一个系统,业务功能非常的多,非常的复杂,就一个用户模块就至少有4个请求,增删改查,如果再加上按条件进行查询等等,不知道得需要多少请求,这么多的请求则会对应着这么多的Action,这样我们开发的系统不知道要有多少东西,更不利于维护。所以为了方便起见,我们采取措施将一个模块的请求放到一块,这样Action类也减少了,也方便便于维护。要将好几个请求放到一个Action中,有好3种方法,具体如下:
首先编写公共UserAction,如下:
public class UserAction extends ActionSupport {
private User user;
//get、set方法省略...
public String addUser() throws Exception {
System.out.println( "UserAction.addUser" );
return SUCCESS;
}
public String modifyUser() throws Exception {
System.out.println( "UserAction.modifyUser" );
return SUCCESS;
}
public String delUser() throws Exception {System.out.println( "UserAction.delUser" );
return SUCCESS;
}
}
第一种:在配置文件(struts.xml)中配置相同的Action类,但是需要使用方法进行区分,具体如下:<action name="" class="com.tgb.UserAction" method="addUser()"><result name="success">/success.jsp</result></action><action name="" class="com.tgb.UserAction" method="modifyUser()"><result name="success">/success.jsp</result></action><action name="" class="com.tgb.UserAction" method="delUser()"><result name="success">/success.jsp</result></action>
第二种: 一个Action处理多个请求,但得需要提交请求的时候带上方法名,例如:user/userManager!addUser。具体如下:1、配置文件中不用变动,照常如下:<action name="user" class="com.tgb.UserAction" ><result name="success">/success.jsp</result><result name="success">/error.jsp</result></action>2、页面提交的时候,其URL地址需要变动一下,如:/user!addUser.action
第三种:需要参数配置,具体如下:1、页面提交地址需要改动:function addUser(){var myForm=document.forms[0];myForm.action="user/addUser";myForm.submit();}2、配置文件中则需要配置接收参数的形式,如下:<action name="*User" class="com.tgb.UserAction" method="{1}User()"><result name="success">/success.jsp</result><result name="success">/error.jsp</result></action>
总结:Struts2提交方式无非就这几种,只要熟知一下,看看知道有这几种形式,等用的时候直接找就好了,俗话说不怕不知道,就怕不知道。