我最近升级到Struts 2.3.16.3,即从2.3.15.1发行的最新版本
现在,当我使用时,我的提交按钮已停止工作-
<s:submit align="center" action='Login_loginUser' value="Login"/>
我的动作映射如下-
<action name="Login_*" method="{1}" class="com.XXXX.XXXX.XXX.LoginAction"> <result name="input" type="tiles">login.tiles</result> <result name="success">/jsp/common/success.jsp</result> </action>
我的struts.xml如下-
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="true"/> <constant name="struts.action.extension" value="action"/> <include file="com/emsproject/system/sysconfig/login.xml"/> </struts>
我的web.xml如下-
<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>eSchoolMate</display-name> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> <init-param> <param-name>actionPackages</param-name> <param-value>com.mypackages</param-value> </init-param> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/struts/*</url-pattern> </filter-mapping> <listener> <listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class> </listener> <listener> <description>sessionListener</description> <listener-class>com.emsproject.action.common.SessionListener</listener-class> </listener> <context-param> <param-name>tilesDefinitions</param-name> <param-value>/WEB-INF/tiles.xml</param-value> </context-param> <welcome-file-list> <welcome-file>/jsp/common/index.html</welcome-file> </welcome-file-list> <servlet> <servlet-name>MyInfo</servlet-name> <servlet-class>com.mypackage.action.common.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyInfo</servlet-name> <url-pattern>/eapp/*</url-pattern> </servlet-mapping> </web-app>
如发行说明中所述,我尝试了排除参数更改,但似乎没有任何效果。
如果我将s:submit更改为HTML输入类型按钮并通过javascript调用操作,如下所示-
function callLogin(){ document.getElementById('sysForm').target="_self"; document.getElementById('sysForm').action='/coms/common/Login_loginUser.action'; document.getElementById('sysForm').submit(); }
这可以正常工作,但在整个应用程序中将是一个巨大的改变:(。
不知道为什么在此版本中无法解析操作映射,因为在Struts 2.3.15.1中一切正常。
任何帮助将非常感激。
谢谢
许多安全修复程序(包括S2-016)已发布到最新版本,因此默认情况下禁用某些功能。要action在submit标记中启用using 属性,请在中使用以下常量struts.xml
action
submit
struts.xml
<constant name="struts.mapper.action.prefix.enabled" value="true"/>