我有一个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>
答案 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'所做的那样