我有一个自定义拦截器,我从中抛出了一个异常;
运行该拦截器的操作由约定插件管理;
拦截器引发的异常在 struts 中全局定义.xml适用于操作正在运行的包。
结果:异常映射被忽略,我得到
支柱问题报告
Struts 检测到未处理的异常:
...
堆栈跟踪
java.lang.IllegalArgumentException: my message
我想我只是错过了一些愚蠢的东西...我们已经在类似的问题中讨论过这个问题,但仍然不清楚它是否可以以这种方式工作:
支柱.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 方法期间引发的异常可以自动捕获并映射到预定义的结果。
但是从拦截器引发的异常也可以由exception
拦截器处理。为了捕获其他拦截器异常exception
拦截器应定义为堆栈中的第一个拦截器。
从 javadoc ExceptionMappingInterceptor
:
建议将此侦听器设置为堆栈上的第一个侦听器,确保它具有完全访问权限来捕获任何异常,甚至是由其他侦听器引起的异常。