有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么“返回错误”只适用于异常?

在支柱上。我使用的xml:

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

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

addActionError("ERROR RETURNED");
return ERROR;

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

请查看下面的编辑以了解更多详细信息

编辑1:

我使用的是Struts2版本: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;

这是我的电话号码。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只是一个<s:actionerror />标记,带有通用标记库和html标记

结论

除非出现异常,否则我无法显示AddActionError消息。我无法在我的操作中使用if语句


共 (3) 个答案

  1. # 1 楼答案

    也许你应该这样做:

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

    然后在错误中。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>
    
  2. # 2 楼答案

    如果你在这里唯一关心的是“昂贵的试吃”,我不会继续这样做。这是次优化,它将引入复杂性,从长远来看,维护成本将高于以毫秒为单位获得的性能

    try块不会增加任何显著的开销,除非实际抛出异常。当我们在这个上下文中谈论“显著的开销”时,它在低毫秒范围内

    为什么要优化错误页面?这并不是人们常说的话

  3. # 3 楼答案

    解决方案摘要:

    一,

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

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

    二,

    如果您想用错误消息重播错误操作。请检查此链接:implement-message-store-interceptor