iteye_2067 2008-11-08 16:22
浏览 617
已采纳

Struts2自定义异常处理拦截器出现问题

struts.xml:



    <global-results>
        <result name="error">error.jsp</result>
    </global-results>



<action name="insert" class="com.lul.action.InsertAction">
    <result name="success">success.jsp</result>
              <interceptor-ref name="exceptionInceptor"></interceptor-ref>
</action>

自定义异常类:
[code="java"]public class BusinessException extends RuntimeException {
private static final long serialVersionUID = 1L;

public BusinessException(String errorMessage) {
    super(errorMessage);
}

}[/code]
自定义用于异常处理的拦截器:
public String intercept(ActionInvocation invocation) throws Exception {
String result = null;
try {
result = invocation.invoke();
} catch(DataAccessException dae) {
throw new BusinessException("数据库操作失败");
}
...
...捕获常见的异常,并以友好异常信息抛出
}
在调用insert.action后,dao抛出异常,但不知为什么不能跳到error.jsp页面,而是
[color=red]HTTP Status 500 -


type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: com.lul.exception.BusinessException: Sorry, 数据库操作失败 Please try again!
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:515)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419)[/color]

有哪位高手知道错误原因,请指教!

[b]问题补充:[/b]


error.jsp

    <global-exception-mappings>   
        <exception-mapping name="exceptionPage"  
                           exception="java.lang.Exception"  
                           result="exceptionPage"/>   
    </global-exception-mappings>  

这样是可以跳到error.jsp页面,但我想要的是在拦截器中对异常进行分类和包装,然后再以友好的方式提示到error.jsp
[b]问题补充:[/b]
to jones:
我是在exceptionInceptor拦截器里对异常进行分类,然后交给BusinessException去提示异常信息,不可能在Action里用N多的catch把异常分类吧,不知道有没有别的好的方法。
[b]问题补充:[/b]
to jones:
我明白你的意思,并且这样可以跳转到指定的错误页面,但我想请教一下,怎么能在错误页面获取拦截器里的异常提示信息。多谢!

  • 写回答

12条回答 默认 最新

  • iteye_521 2008-11-08 21:48
    关注

    [code="java"]怎么能在错误页面获取拦截器里的异常提示信息。多谢! [/code]
    这个简单,通过ActionContext.getContext().getValueStack()拿到OGNL的ValueStack,把你的异常信息存进去,然后再页面通过OGNL表达式获取就行了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(11条)

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置