一尘不染

升级到Struts 2.3.16.3 s之后:submit不起作用

jsp

我最近升级到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中一切正常。

任何帮助将非常感激。

谢谢


阅读 207

收藏
2020-06-08

共1个答案

一尘不染

许多安全修复程序(包括S2-016)已发布到最新版本,因此默认情况下禁用某些功能。要actionsubmit标记中启用using
属性,请在中使用以下常量struts.xml

<constant name="struts.mapper.action.prefix.enabled" value="true"/>
2020-06-08