在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
语句。
答案 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)
解决方案摘要:
不要将“错误”重定向为ction,只需使用
即可<result name="error"> **error.jsp** </result>
如果您想要使用错误消息重写错误操作。查看此链接:implement-message-store-interceptor