关于struts2的异常处理的问题

hbqhs 2011-11-07 06:16:37
这样的 我在两个Action前执行一个AOP的方法。

这个AOP的方法中抛出一个自定义的异常。 然后在struts.xml中捕获异常

但是很神奇的是,同一个包下的两个Action(使用同一个AOP)。

分别执行两个Action时,一个可以捕获到AOP抛出的异常跳到指定页面。

但是另一个却捕获不到,而是给出了一个java.lang.reflect.UndeclaredThrowableException。


简单说: 就是AOP的异常,有时候会捕获不到。 找了很久都不知道原因。 求高手解答!
...全文
100 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
晨青 2013-12-24
  • 打赏
  • 举报
回复
好久远的帖子。。。但是今天自己也碰到这个问题。。弄了好久。。。。最后发现要给被拦截的方法加throws Exception
fyswords 2011-11-10
  • 打赏
  • 举报
回复
弹窗的异常如果产生在弹出的窗体内就得自己继承窗体类再catch吧
hbqhs 2011-11-08
  • 打赏
  • 举报
回复
貌似只要是该ACTION的操作结果是弹窗的,就无法拦截异常。

而在当前页面执行的 则可以捕获。

= =0 莫名其妙啊……
hbqhs 2011-11-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 fyswords 的回复:]

异常都是自己throw的吗?是不是没到自己try的代码已经有异常了
[/Quote]

不是 我调试过了 程序确实已经运行到我所抛的异常处了。

就是不知道为什么struts2捕获异常后无法跳转到指定result页面。而是直接把异常页显示出来。


异常页还多了个这个异常:
java.lang.reflect.UndeclaredThrowableException
com.digimaple.webfolder.action.share.ShareAction$$EnhancerByCGLIB$$f21d466e.share(<generated>)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)

……
……
……

下面才出现我抛的异常
fyswords 2011-11-08
  • 打赏
  • 举报
回复
异常都是自己throw的吗?是不是没到自己try的代码已经有异常了
dragonsky_w 2011-11-08
  • 打赏
  • 举报
回复
抱歉,没有办法帮到你,没有遇到过这样的事情……
hbqhs 2011-11-08
  • 打赏
  • 举报
回复
没人遇到过这样的问题吗? 这两个action的配置几乎是一样的 。 唯一不同的也许就是前一个的result页面是弹窗的。后一个则是直接跳转的。
hbqhs 2011-11-07
  • 打赏
  • 举报
回复
这是自定义的异常:

public class NoPermissionException extends Exception {

public NoPermissionException(String s) {
super(s);
}
}




两个Action在xml的配置如下:

这个action上的AOP的异常无法捕获

<action name="share" class="com.digimaple.webfolder.action.share.ShareAction" method="share">
<result name="success">../webfolder/share.jsp</result>
<result name="error">../webfolder/validate.jsp?msg=noexist</result>

<result name="permission">../webfolder/shareMoveResult.jsp?msg=nopermission&val=browser</result>
<exception-mapping exception="com.digimaple.webfolder.exception.NoPermissionException" result="permission">
</exception-mapping>
</action>



这个却可以

 <action name="pasteShare" class="com.digimaple.webfolder.action.share.PasteShareAction" method="pasteShare">
<result name="success">/webfolder/shareMoveResult.jsp?msg=success</result>
<result name="none">/webfolder/shareMoveResult.jsp?msg=none</result>
<result name="error">/webfolder/shareMoveResult.jsp?msg=error&val=browser</result>

<result name="permission">/webfolder/shareMoveResult.jsp?msg=nopermission&val=browser</result>
<exception-mapping exception="com.digimaple.webfolder.exception.NoPermissionException" result="permission">
</exception-mapping>
</action>



67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧