4

我有一个动作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 之后,方法映射不起作用。而不是调用相应的方法(例如"shopPdfReprint"),只execute()调用类的方法。

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

有人遇到过这个吗?

4

2 回答 2

2

发生这种情况是因为您关闭了DMI。即使在重新发送安全修复后,该method属性也可以像以前一样与提交标签一起使用。使用常量启用 DMI

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

让我知道它是否不起作用。

于 2013-11-18T16:28:04.690 回答
0

如果有人正在迁移或使用 Struts 2.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";
    }
}
于 2017-05-02T07:23:43.500 回答