问题:在struts2.5中如果使用方法通配符,是无法进行方法调用的:
<action name="login_*" class="loginAction" method="{1}">
.............
</action>
因为从2.3开始在package元素中增加了一个属性,为了限制DMI的方法访问:
<package name="test" namespace="/test" extends="struts-default" strict-method-invocation="">
..................
</package>
默认情况下是没有设置值,所以2.3是可以进行调用的。但是到了2.5以后默认设置为true,所以从2.5开始默认情况下是无法进行通配符方法调用的。修改的方式:
1、
<package name="test" namespace="/test" extends="struts-default" strict-method-invocation="false">
</package>
2、
<package name="test" namespace="/test" extends="struts-default" strict-method-invocation="true">
<action name="electricText_*" class="electricTextAction" method="{1}">
<result name="{1}">/system/textAdd.jsp</result>
<allowed-methods>添加Action类中允许访问的方法,以逗号分隔</allowed-methods>
</action>
</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]*)"/>