升级Struts2.5后使用DMI动态方法调用遇到问题
转自:http://www.lvhongqiang.com/blog429.html
问题:
升级Struts2.5后使用DMI动态方法调用报错,method 找不到。
源码:
struts.xml
<action name="json_*_*" class="{1}Action" method="{2}">
<result name="success" type="json"></result>
<result name="error" type="json"></result>
<result name="input" type="json"></result>
</action>
分析:
目前情况:json_record_list.action
访问不会报错。json_record_query.action
访问报错。
调用Action中list方法时并没有报错,随后调用query方法时报错,问题锁定方法名。改为随意字符串abcdeq之类方法名都会报错,就是说只有特定方法名才可以。所以怀疑struts某处有关于方法名的默认设置。百度后得知Struts2.5新增了allowed-methods配置,只有被允许的方法名才可以动态调用。
解决办法:
在配置文件struts.xml中添加:<global-allowed-methods>regex:.*</global-allowed-methods>
<package name="exam" extends="json-default">
<global-allowed-methods>regex:.*</global-allowed-methods>
<action name="user" class="userAction">
...
</action>
</package>
或者在某一action内添加<allowed-methods>regex:.*</allowed-methods>
注解方式:
在 action 上使用 @AllowedMethods 注解
默认的设置:
<global-allowed-methods>execute,input,back,cancel,browse,save,delete,list,index</global-allowed-methods>