struts2之动态方法调用(DMI)

                                                          动态方法调用(DMI)

     定义:动态方法调用是指表单元素的action并不是直接等于某个Action的名字,而是以action=“Action!methodName.action”形式来指定Form的action属性。

   功能:在Struts2中动态方法调用有三种方式,动态方法调用就是为了解决一个Action对应多个请求的处理,以免Action太多。

   注意:使用动态方法调用必须设置Struts2允许动态方法调用。开启系统的动态方法调用是通过设置struts.enable.DynamicMethodInvocation常量完成的,设置该常量的值为true,将开启方法调用,否则将关闭动态方法调用。

第一种指定method属性:

       如果在配置<action>元素指定method属性,则可以让Action类调用指定方法,而不是execute方法来处理用户请求。

     在struts.xml

<action name="login" class="chapter2.action.LoginRegister"
method="">
<result name="success">/redirect.jsp</result>
</action>
  
<action name="register" class="chapter2.action.LoginRegister"
method="register">
<result name="success" >/register.jsp</result>
</action> 

第二种方式:感叹号方式(需要开启),官网不推荐使用这种方式,建议大家不要使用.

       

使用实例

Action  
package chapter3.action;  

public class Chapter3Action {  
public String result1(){  
   return "result1";  
}  

public String result2(){  
   return "result2";  
}  
}   


Jsp的访问方式:


<body>  
    <a href="${basePath}/chapter3/chapter3Action!result1">result1</a><br>  
    <a href="${basePath}/chapter3/chapter3Action!result2">result2</a><br>  
</body>  


如果配置了后缀:

/chapter4/chapter4Action!create.action  


xml配置方式:


<package name="chapter3" namespace="/chapter3" extends="struts-default">  
   <action name="chapter3Action" class="chapter3.action.Chapter3Action">  
    <result name="result1">/WEB-INF/JspPage/chapter3/result1.jsp</result>  
    <result name="result2">/WEB-INF/JspPage/chapter3/result2.jsp</result>  
    <result name="chapter3">/WEB-INF/JspPage/chapter3/chapter3.jsp</result>  
   </action>  
</package>   


第三种:使用通配符

       在配置<action.../>元素时,需要指定name、class和method属性,在name属性中使用通配符,在class和method属性中使用表达式。当我们使用通配符定义Action的name属性时,相当于一个<action.../>元素定义多个逻辑Action。

开关关闭

<constant name="struts.enable.DynamicMethodInvocation" value="false" />

<action name="chapter3_*" class="chapter3.action.Chapter3Action"  
method="{1}">  
<result name="test">/…/test.jsp</result>  
</action>   
chapter3_*这里的*就是你呆会要匹配的字符串,即你在后面的请求中得这样写 

http://...../ chapter3_create 或 http://...../ chapter3_update  
注意,这时你action中必须有create和update方法与之匹配,甚至还可以这样匹配

<action name="chapter3_*" class="chapter3.action.Chapter3Action"  
method="{1}">  
<result name="test">/…/{1}.jsp</result>  
</action>   





        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值