1

我有一个 struts2 操作,它使用addActionError如下所示设置了一些错误

 public String del() {
        if (new OrdersService().get(idorder) == null) {
            addActionError("Order not found");
        } else {
            new OrdersService().remove(idorder);
            addActionMessage("Order deleted successfully");
        }
        return SUCCESS;
    }

所以上述方法无所谓总是返回“成功”结果。

但是在 struts.xml 中,我使用了重定向结果类型来重定向到另一个操作,并且该操作从未执行,而是我得到了结果“输入”,我无法理解出了什么问题?

是不是类似于如果一个动作设置了一个actionError,则无法执行另一个动作,并且会立即抛出“输入”结果。但这没有意义(至少对我来说)!

[编辑] 包括 struts.xml 的某些部分

<action name="/order/{idorder:[0-9]+}/del" class="actions.OrderAction" method="del">
    <interceptor-ref name="store">
        <param name="operationMode">AUTOMATIC</param>
    </interceptor-ref>
    <interceptor-ref name="defaultStack" />

    <result name="success" type="redirect">orders</result>
</action>
4

2 回答 2

3

默认堆栈包括“工作流”拦截器。

如果存在操作或字段错误,此拦截器将返回“输入”结果,因为存在错误。

阅读一些文档将为您指明正确的方向。请注意,您的错误无论如何都会在重定向中丢失,除非您专门保存它们。

此外,如果您想重定向到某个操作,请使用“actionRedirect”结果类型。

于 2013-04-17T01:39:45.470 回答
0
public String del() {
    if (new OrdersService().get(idorder) == null) {
        addActionError("Order not found");
        return ERROR;
    } else {
        new OrdersService().remove(idorder);
        addActionMessage("Order deleted successfully");
        return SUCCESS;
    }
}

还包括返回类型“错误”,就像您在 struts.xml 中的操作映射中为返回类型“成功”所做的那样

于 2017-06-13T09:24:52.603 回答