【问题标题】:Struts2 addActionError setting result to input automatically on redirect resultStruts2 addActionError 设置结果自动输入重定向结果
【发布时间】:2013-04-17 01:15:15
【问题描述】:

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

【问题讨论】:

    标签: struts2 struts


    【解决方案1】:

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

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

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

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

    【讨论】:

    • Note that your errors will be list on a redirect anyway, unless you specifically save them. - 请解释一下。
    • 我在 action1 中设置了错误,即使我将“输入”结果配置为 redirectAction 结果,因此它应该调用第二个动作,但第二个动作不执行,而是在浏览器中我看到错误说,第二个动作输入结果未定义。
    • “将成为列表”是“将丢失”,已编辑。请注意,在调用 Action 之前,工作流拦截器会返回 INPUT 结果(验证拦截器引发一些输入错误之后)。如果您正在获取输入,则不会执行任何操作代码。请注意,最好将 INPUT 结果发送到启动请求的同一 JSP,这有几个原因(您可以自动突出显示错误的字段,保留所有发送的数据等)
    • @AndreaLigios 只是为了好奇——如果我仍然想重定向,即使我输入了结果。我刚刚在上面看到并得到它!我正在使用store 拦截器,它将重新填充重定向操作中的操作错误,因此,我可以纠正为什么在浏览器中我得到未定义的第二个操作输入结果。谢谢你们。
    【解决方案2】:
    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 中的操作映射中为返回类型“成功”所做的那样

    【讨论】:

      猜你喜欢
      • 2012-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多