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
语句
# 1 楼答案
也许你应该这样做:
然后在错误中。jsp:
我不确定,如果您只键入“error”而不是“error.jsp”,那么struts会将“error”作为一个动作处理,因此您不会得到错误消息
最好的,j
对于您的编辑3:
# 2 楼答案
如果你在这里唯一关心的是“昂贵的试吃”,我不会继续这样做。这是次优化,它将引入复杂性,从长远来看,维护成本将高于以毫秒为单位获得的性能
try块不会增加任何显著的开销,除非实际抛出异常。当我们在这个上下文中谈论“显著的开销”时,它在低毫秒范围内
为什么要优化错误页面?这并不是人们常说的话
# 3 楼答案
解决方案摘要:
一,
不要将“错误”重定向为动作,只需使用
二,
如果您想用错误消息重播错误操作。请检查此链接:implement-message-store-interceptor