Struts2 addActionError设置结果在重定向结果上自动输入

时间:2013-04-17 01:15:16

标签: struts2 struts

我有一个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;
    }

所以上面的方法NO MATTER WHAT总会返回“成功”结果。

但是在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>

2 个答案:

答案 0 :(得分:3)

默认堆栈包含“workflow”拦截器。

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

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

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

答案 1 :(得分: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;
    }
}

还包括返回类型'error',就像你在struts.xml中的动作映射中的返回类型'success'所做的那样