问题:在struts2.5中如果使用方法通配符,是无法进行方法调用的:
1<action name="login_*" class="loginAction" method="{1}"> 2............. 3</action>
因为从2.3开始在package元素中增加了一个属性,为了限制DMI的方法访问:
1<package name="test" namespace="/test" extends="struts-default" strict-method-invocation=""> 2.................. 3</package>
默认情况下是没有设置值,所以2.3是可以进行调用的。但是到了2.5以后默认设置为true,所以从2.5开始默认情况下是无法进行通配符方法调用的。修改的方式:
1、
1<package name="test" namespace="/test" extends="struts-default" strict-method-invocation="false"> 2</package>
2、
1<package name="test" namespace="/test" extends="struts-default" strict-method-invocation="true"> 2 <action name="electricText_*" class="electricTextAction" method="{1}"> 3 <result name="{1}">/system/textAdd.jsp</result> 4 <allowed-methods>添加Action类中允许访问的方法,以逗号分隔</allowed-methods> 5 </action> 6</package>
在不启用的情况下,注意默认的匹配规则是: SMI is disabled - call to any action method is allowed that matches the default RegEx - ([A-Za-z0-9_$]*)
可以通过定义常量更改,在struts.xml中:
<constant name="struts.strictMethodInvocation.methodRegex" value="([a-zA-Z]*)"/>