【发布时间】:2014-12-23 14:53:47
【问题描述】:
我有一个自定义拦截器,我从中抛出异常;
运行 Interceptor 的 Action(s) 由 Convention 插件管理;
拦截器引发的异常在 struts.xml 中为 Action 正在运行的包全局定义。
结果:异常映射被忽略,我得到了
Struts 问题报告
Struts 检测到一个未处理的异常:
...堆栈跟踪
java.lang.IllegalArgumentException:我的消息
我想我只是错过了一些愚蠢的东西......我们已经讨论过这个in a similar question,但仍然不清楚它是否可以这样工作:
struts.xml
<package name="my-package" namespace="my" extends="struts-default">
<interceptors>
<interceptor name="myInterceptor" class="foo.bar.MyInterceptor"/>
<interceptor-stack name="myStack">
<interceptor-ref name="myInterceptor"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myStack"/>
<global-results>
<result name="input">/WEB-INF/content/my-input.jsp</result>
<result name="error">/WEB-INF/content/my-error.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping exception="java.lang.IllegalArgumentException"
result="error" />
<exception-mapping exception="java.lang.Exception" result="error" />
</global-exception-mappings>
</package>
动作
@ParentPackage("my-package")
@Namespace("/my/blabla/yadayada")
public class MyAction extends MyBaseAction {
}
拦截器
@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
// ....
if (somethingWrong) {
throw new IllegalArgumentException("All work and no play makes Jack a dull boy");
}
}
我也尝试在抽象 BaseAction 或物理实际 Action 本身中定义全局结果/全局异常映射,但它们也被忽略了。
关于添加/删除/更改什么以使其正常工作的任何想法?这不是深奥的东西,这是基本的:|
【问题讨论】:
-
2.3.16.3(由于与 struts2-jquery 插件 3.7.1 不兼容,无法更新到 2.3.20...然后等待 4.0.0)
-
所以没有任何方法可以将拦截器返回的异常映射到已知结果?我可以从拦截器返回一个结果,但它不会再与项目配置分离......如果我返回一个异常,它可以被映射或不被映射(因此被显示为美化或原始),而如果我返回一个结果它应该在配置中定义...顺便说一句,将其添加为答案,以便我可以投票并(很可能)接受
-
离题:...与 struts2-jquery 插件 3.7.1 不兼容 你知道吗?我刚刚升级了一个具有一些 s2-jqr 功能的应用程序,它似乎工作正常......现在。 ;)
-
我想到了,但我还没试过……我现在正在做。
-
我不经常使用 s2-jqr 插件,所以我不能确定所有功能都正常工作,但日期选择器和对话框都很好。 另外关于 2.3.20 的更新和这个问题,请参阅 issues.apache.org/jira/browse/WW-4433。祝你更新顺利。
标签: exception struts2 struts-config struts2-interceptors struts2-convention-plugin