解决Struts-2.5版本使用DML动态调用和<s:form method="">method属性不生效问题
问题原因
两个问题根本是相同的,都是外部jsp调用Action中的方法,因为新版本2.5中 的安全机制 ,导致无法用action外部传来的方法,所以两个解决方法是一致的。
解决步骤:
步骤1:
新版本2.5是默认不开启动态调用的所以要手动开启,在struts.xml文件中添加常量配置,开启动态方法调用:
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
步骤2:
开启动态调用也不能使用,因为struts2.5的安全机制限制外部调用,所以需要声明允许直接访问的方法,
方法有两种:
在struts.xml中的package标签下添加<global-allowed-methods>,标签值为允许外部调用的方法名,多个用逗号分隔,要放在action标签的前面。
或者在action标签中添加<allowed-methods>形式同上,要放在result标签后边。
<!--第一种--> <package name="default" namespace="/" extends="struts-default"> <global-allowed-methods>methodName[,...]</global-allowed-methods> <action></action> ... </package> <!--第二种--> <action name="login-two" class="action.LoginAction_XWork" > <result name="hello">/hello.jsp</result> <allowed-methods>methodName[,...]</allowed-methods> </action>