0

在我使用的 struts.xml 中:

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

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

addActionError("ERROR RETURNED");
return ERROR;

当我提交表单时,它只是进入一个空白页面并且什么都不做。但是,如果我强制在操作中引发异常,那么它会转到错误页面并显示 ActionError 消息。那我做错了吗?如果是这样,我应该如何告诉 struts 使用“if 语句”而不是仅仅依赖昂贵的 try catch 来显示错误页面?

请查看下面的编辑以获取更多详细信息。

编辑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:

Myerror.jsp只是一个<s:actionerror />带有通用 taglibs 和 html 标签的标签...

结论

AddActionError除非有例外,否则我无法显示消息。我无法if在我的行动中使用陈述。

4

3 回答 3

2

也许你应该这样做:

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

然后在error.jsp中:

<s:actionerror/>

我不确定,如果你只输入“error”而不是“error.jsp”,struts 会将“error”作为一个动作,所以你不会收到错误消息。

最好的,j

对于您的编辑 3:

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

<action name="number_save">
  <result name="error" type="redirectAction">error</result>
</action>
于 2012-06-25T09:02:14.020 回答
0

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

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

你为什么要优化错误页面?这不是经常被调用的东西。

于 2012-06-25T10:40:01.797 回答
0

解决方案总结:

1

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

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

2

如果您想用错误消息来纠正错误操作。检查此链接:implement-message-store-interceptor

于 2012-06-25T11:29:07.173 回答