Java Struts操作中的多个入口点(迁移Struts 2.2.3->;2.3.1)

Java Struts操作中的多个入口点(迁移Struts 2.2.3->;2.3.1),java,jsp,struts2,dmi,Java,Jsp,Struts2,Dmi,我在struts.xml中有一个操作: 重印 /x ${errorFlag} ${message} /jsp/reprintOverview.jsp JSP: 具有多个表单元素,所有元素都绑定到一个操作。 每个表单都有一个单独的提交按钮,带有不同的方法(例如“shopPdfReprint”)。 每个方法都映射到相应类中的一个方法 Struts 2.2.3的一切都很好。但是在迁移到2.3.1之后,方法映射不起作用。只调用类的execute()方法,而不是调用相应的方法(例如“shopPdf

我在
struts.xml
中有一个操作:


重印
/x
${errorFlag}
${message}
/jsp/reprintOverview.jsp
JSP:


具有多个表单元素,所有元素都绑定到一个操作。 每个表单都有一个单独的提交按钮,带有不同的
方法
(例如
“shopPdfReprint”
)。 每个
方法
都映射到相应类中的一个方法

Struts 2.2.3的一切都很好。但是在迁移到2.3.1之后,方法映射不起作用。只调用类的
execute()
方法,而不是调用相应的方法(例如
“shopPdfReprint”

我查看了文档,但不幸的是没有找到任何线索,即如何适应2.3.1


有人遇到过这种情况吗?

发生这种情况是因为您已关机。
方法
属性与以前一样使用submit标记,即使在重新提交安全修复之后也是如此。使用常量启用DMI

<constant name="struts.enable.DynamicMethodInvocation" value="true"/> 


如果它不起作用,请告诉我。

如果有人正在移动或使用Struts 2.5,那么他们不必使用Struts.xml映射操作。 Strtus 2.5是基于注释的,因此在操作类开发人员可以使用注释在单个类中映射多个操作

从旧struts版本到struts 2.5版本,此链接可能会有所帮助

下面是简单的演示代码

package com.stsh.action;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;

import com.opensymphony.xwork2.ActionSupport;
import com.stsh.intercepter.AuthRequired;

@ParentPackage(value="default")
@Namespace(value="/dashboard")
public class DashboardAction extends ActionSupport implements AuthRequired{

    private static final long serialVersionUID = 1L;

    @Action(value = "home", results = { @Result(name = "success", location = "dashboard.tiles", type = "tiles") })
    public String dashboard(){
        return "success";
    }
}

很多坦克!不幸的是,我只能明天再试试。我会立即给你反馈。我没有改变配置。我想知道,你提到“关闭DMI”。是否有不同的默认行为?默认情况下,DMI处于启用状态,允许在URL中使用特殊语法来执行方法,而不是映射到该URL,提交标记使用它。是的!非常感谢你!工作起来很有魅力。在你给我暗示之后,我进一步寻找这个问题。看起来,出于安全原因,DMI在默认情况下是关闭的。如果我们没有在Spring MVC的长期迁移过程中,我现在考虑切换。