Struts2动态方法调用

Action执行的时候并不一定要执行execute方法,我们可以指定Action执行哪个方法:

1、方法一(通过methed属性指定执行方法):

可以在配置文件中配置Action的时候用method=来指定执行哪个方法

<action name="userAdd" class="com.bjsxt.struts2.user.action.UserAction" method="add">

           <result>/user_add_success.jsp</result>

</action>

   这样,只要在action的对象中有一个add的方法,并且返回类型为String就可以了。如果没有method属性,则默认执行execute()方法。

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {

   public String add() {

      return SUCCESS;

   }  

}

2、 动态方法调用DMI(推荐)

可以在url地址中动态指定action执行那个方法。Url地址如下:

方法:action + ! + 方法名

注:只要Action对象中有这个方法,并且返回类型为String就可以调用。

需要设置开关:<constant name="struts.enable.DynamicMethodInvocation" value="true" />

这样Struts.xml配置文件中不需要配置methed属性。代码如下:

<action name="user" class="com.bjsxt.struts2.user.action.UserAction">

      <result>/user_add_success.jsp</result>

</action>

Action类:

public class UserAction extends ActionSupport {

   public String add() {

      return SUCCESS;

   }  

}

 
  总结:推荐使用第二种 动态方法调用DMI,因为第一种需要大量的Action配置,后者可以在url中动态指定执行action中哪个方法。

使用通配符,将配置量降到最低, 不过,一定要遵守"约定优于配置"的原则

3、 通配符

星号(*)  表示所有

{数字} 表示第几个通配符

例如:Student*  那么{1}代表第一个星号(*)

          *_*                  那么{1}代表第一个星号(*) ,{2}代表第二个星号(*)

3-1、 实例

<package name="actions" extends="struts-default" namespace="/actions">

       <action name="Student*" class="com.bjsxt.struts2.action.StudentAction" method="{1}">

           <result>/Student{1}_success.jsp</result>

       </action>

       

       <action name="*_*" class="com.bjsxt.struts2.action.{1}Action"method="{2}">

           <result>/{1}_{2}_success.jsp</result>

           <!-- {0}_success.jsp -->

       </action>

</package>

解释:第一个Action的名称为name=”Student*”method=”{1}”,表示所有Action以Student开始的都会执行这个Action,并且执行Student后字符为方法名的方法,例如:访问的Action为Studentadd,会执行这个Action(Student*),并且执行add的方法.因为{1}在这里代表add,并且返回/Studentadd_success.jsp页面。

第二个Action的名称name=”*_*” method=”{2}” class=”…action.{1}Action”表示所有Action中包含下划线(“_”)都会执行这个Action,例如:Teacher_add,那么会执行这个Action,并且Action对应的类为TeacherAction,且执行Action中的add方法,返回结果页面为/Teacher_add_success.jsp,因为在这里的{1}表示Teacher,{2}表示add

3-2、 匹配顺序

当匹配的Action有两个以上时,则会按 匹配精确度高的那个Action,当有个相同的匹配精确度时,则按先后顺序进行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值