有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Struts操作中的java多入口点(迁移Struts 2.2.3>2.3.1)

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

<action name="reprint" class="reprintAction">
        <result name="success" type="redirectAction">
            <param name="actionName">reprint</param>
            <param name="namespace">/x</param>
            <param name="errorFlag">${errorFlag}</param>
            <param name="message">${message}</param>
        </result>
        <result name="view">/jsp/reprintOverview.jsp</result>
</action>

JSP:

<s:form action="reprint">
    <s:select name="selectedPdfPrinter" list="shopPdfPrinterList" listKey="deviceId" listValue="deviceId" theme="simple"/>
    <s:submit value="Print" theme="simple" method="shopPdfReprint"/>
</s:form>

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

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

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

有人碰到这个吗


共 (2) 个答案

  1. # 1 楼答案

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

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

    https://struts.apache.org/docs/struts-23-to-25-migration.html

    下面是简单的演示代码

    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";
        }
    }
    
  2. # 2 楼答案

    这是因为您关闭了DMImethod属性可以像以前一样使用submit标记,即使在重新提交安全修复之后也是如此。使用常量启用DMI

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

    如果不起作用,请告诉我