为什么“返回ERROR”仅适用于例外情况?

时间:2012-06-25 08:46:10

标签: java jsp redirect error-handling struts2

在struts.xml中我使用:

<result name="error">error</result>

然后在我的行动中我使用:

addActionError("ERROR RETURNED");
return ERROR;

当我提交表单时,它只是转到一个空白页面而什么都不做。但是,如果我强制在操作中抛出异常,那么它将转到错误页面并显示ActionError消息。我这样做错了吗?如果是这样,我应该如何告诉struts使用“if语句”显示错误页面,而不是仅依靠昂贵的尝试捕获?

请查看以下编辑内容以了解更多详情。

编辑1:

我正在使用struts 2版本:2.1.8.1

编辑2:

例如,这是我用来测试的动作代码:

String test = "";
int number = 0;
        try {
        if (number == 1) {
            test = SUCCESS;
        } else if (number == 2) {
            addActionError("ERROR RETURNED?");
            test = ERROR;
        } else if (number == 3) {
            addActionError("ERROR RETURNED?");
            test = INPUT;
        } else {
            test = LOGIN;
        }
        } catch (Exception e) {
            addActionError("ERROR RETURNED? " + e);
        }
        return test;

这是我的number.jsp代码:

<s:form action="number_save" method="post">
     <s:textfield name="number" label="Enter number" />
</s:form>
<s:actionerror />

编辑3:

这是我的struts.xml的更长版本:

 <action name="number" method="numberCreate" class="NumberActionBean">
       <result>number.jsp</result>
 </action>

<action name="error">
    <result>error.jsp</result>
</action>

<action name="number_save" method="numberSave" class="NumberActionBean">
            <interceptor-ref name="defaultStack"></interceptor-ref>
            <result name="success" type="redirect">index</result>
            <result name="input" type="redirect">number</result>
            <result name="error">error</result>
            <result name="login" type="redirect">login</result>
            <result name="none">number</result>
</action>

编辑4:

我的error.jsp只是一个带有常规taglib和html标签的<s:actionerror />标签......

结论

除非有异常,否则我无法显示AddActionError条消息。我在行动中无法使用if语句。

3 个答案:

答案 0 :(得分:2)

也许你应该这样做:

<result name="error">error.jsp</result>

然后在error.jsp:

<s:actionerror/>

我不确定,如果您只输入“error”而不是“error.jsp”,struts会将“错误”作为操作,因此您不会收到错误消息。

最好,j

为你的编辑3:

<action name="error">
  <result name="error">error.jsp</result>
</action>

<action name="number_save">
  <result name="error" type="redirectAction">error</result>
</action>

答案 1 :(得分:0)

如果您唯一担心的是“昂贵的尝试捕获”,我不会继续这样做。这是次优化,它会带来复杂性,从长远来看,维护成本比以毫秒级性能获得的成本更高。

除非实际抛出异常,否则try-block不会增加任何显着的成本开销。当我们在这种情况下讨论“显着的开销”时,它处于低毫秒范围内。

为什么要尝试优化错误页面?这不是经常会被称为的东西。

答案 2 :(得分:0)

解决方案摘要:

1

不要将“错误”重定向为ction,只需使用

即可
<result name="error"> **error.jsp** </result>

2

如果您想要使用错误消息重写错误操作。查看此链接:implement-message-store-interceptor