Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “为什么?”;返回错误“;只适用于例外情况?_Java_Jsp_Redirect_Error Handling_Struts2 - Fatal编程技术网

Java “为什么?”;返回错误“;只适用于例外情况?

Java “为什么?”;返回错误“;只适用于例外情况?,java,jsp,redirect,error-handling,struts2,Java,Jsp,Redirect,Error Handling,Struts2,在struts.xml中,我使用: <result name="error">error</result> 当我提交表格时,它只会进入空白页,什么也不做。但是,如果我强制在操作中抛出异常,那么它将转到错误页面并显示ActionError消息。那么我做错了吗?如果是这样,我应该如何告诉struts使用“If语句”来显示错误页面,而不是仅仅依靠昂贵的try捕获 请查看下面的编辑以了解更多详细信息 编辑1: 我使用的是Struts2版本:2.1.8.1 编辑2: 例如,下面是

在struts.xml中,我使用:

<result name="error">error</result>
当我提交表格时,它只会进入空白页,什么也不做。但是,如果我强制在操作中抛出异常,那么它将转到错误页面并显示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;
以下是我的number.jsp代码:

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

编辑3:

下面是my 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>

number.jsp
error.jsp
指数
数
错误
登录
数
编辑4:

我的
error.jsp
只是一个带有常规标记库和html标记的
标记

结论


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

也许您应该这样做:

<result name="error">error.jsp</result>
error.jsp
然后在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>

error.jsp
错误

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

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

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

解决方案摘要:

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

<result name="error"> **error.jsp** </result>
**error.jsp**
2.
如果您想用错误消息重播错误操作。查看此链接:

当它进入空白页时,服务器控制台上是否有任何内容?您希望表单提交时发生什么?向我们展示相关的struts映射和一些操作代码。此外,我想知道,结果配置中的
错误是什么?这是一个JSP页面还是什么?@ThreaT:你能告诉我这个错误是怎么回事吗?@ThreaT:根据你的帖子,你说错误只是显示一个空白页面,没有你在操作中设置的错误消息,所以我想知道你的错误是什么,您的edit2似乎不包含error.jsp或mi缺少某些内容,但您是否也应该更改action
number\u save
的错误结果,以指向error.jsp?这就是它失败的地方,看起来:
error
应该是
error.jsp
。同样,您需要在操作
number\u save
中使用它!所以这里:。。。error.jsp…啊,您的意思是它应该重定向到映射到
error.jsp
的操作
error
。我懂了。如果我是你,我还是会尝试一下:)@ThreaT请尝试添加动作类型“重定向动作”@ThreaT呵呵,就像我之前提到的,所以为什么不使用error.jsp,不要尝试“重定向”动作。我刚在谷歌上搜索了4U,这里是参考资料,如果你真的想这么做,请勾选这个:优化错误页面?我尽量避免使用try-catch,而是使用
if
语句。如果我可以做一个基本的
If
检查,避免服务器上的每个用户都抛出相同的异常,那么为什么不呢?这并不是说它是唯一运行的东西,我们的想法是尽可能节省资源,否则我们会在后期遇到慢系统。您的逻辑中的缺陷是,您假设在启动时会浪费资源。同样,输入try块不会产生任何重大成本。性能/资源成本是实际引发和捕获异常的时间。因此,假设您没有将异常用于基本流控制,那么您实际上是在为真正抛出异常的情况进行优化,这将是在发生错误的情况下。但我绝对不能决定你们在哪里花费你们的发展资源。仅仅说弯曲框架以符合既定模式和违背既定模式都会带来成本,无论是在开发还是在维护方面。做一些研究,做一些测试——我做了我的。它们的可扩展性不够,无法像许多人希望的那样自由使用。你的答案是错误的,因为它再次假设有资源可以浪费。不需要“框架弯曲”,因为有很多方法可以实现我想要实现的目标。如果你读到我选择的答案是正确的,那么你就会知道。再说一次,try/catch并不昂贵,除非实际抛出了异常。我不知道你一直在做什么测试和/或研究,但我质疑你的结果。在执行级别上,未使用的try/catch与if/else具有大致相同的指令密度。如果您认为它们并不昂贵,那么为什么不使用它们来耗尽您的应用程序,看看它会给您带来什么?显然没有人会过度使用它们,但问题是它们很昂贵。你可以删除第一个,因为它是不正确的。我提到我将错误映射到error.jsp,所以这不是问题。
<result name="error"> **error.jsp** </result>