- Struts 2.x权威指南
- 李刚编著
- 503字
- 2022-07-20 11:12:02
4.6.1 类型转换的错误处理流程
Struts 2提供了一个名为conversionError的拦截器,这个拦截器被注册在默认的拦截器栈中。我们查看Struts 2框架的默认配置文件:struts-default.xml文件,该文件中有如下配置片段。
<interceptor-stack name="defaultStack"> <!-- 省略其他拦截器引用 --> ... <!-- 处理类型转换错误的拦截器 --> <interceptor-ref name="conversionError"/> <!-- 处理数据校验的拦截器 --> <interceptor-ref name="validation"> <param name="excludeMethods">input,back,cancel,browse</param> </interceptor-ref> <!-- 省略其他拦截器 --> ... </interceptor-stack>
在上面的默认拦截器栈中包含了conversionError拦截器的引用,如果Struts 2的类型转换器执行类型转换时出现错误,该拦截器负责将对应错误封装成表单域错误(fieldError),并将这些错误信息放入ActionContext中。
显然,conversionError拦截器实际上是一个Throws处理(关于各种处理类型的定义和深入介绍,请参阅疯狂Java体系的《轻量级Java EE企业应用实战》一书)。当系统抛出异常时启动,Throws处理负责进行处理。通过这种方式,Struts 2允许类型转换器中只完成类型转换逻辑,而无须关心异常处理逻辑——因此,我们看到上面的类型转换器无须进行任何异常处理逻辑。
图4.15显示了Struts 2类型转换中的错误处理流程。
![](https://epubservercos.yuewen.com/1C94E6/3590582303459301/epubprivate/OEBPS/Images/figure_0153_0328.jpg?sign=1739421839-dMRVre0ALrWI1V5MoxSa20vPrMpBAogG-0-19fe2d2be7cba95cab6843ed1325a179)
图4.15 Struts 2类型转换中的错误处理流程
图4.15只显示了类型转换器、conversionError拦截器和控制器之间的顺序,并未完全刻画出系统中的其他成员。当 conversionError 拦截器对转换异常进行处理后,系统会跳转到名为input的逻辑视图。
必须指出的是,为了让Struts 2框架处理类型转换错误,以及使用后面的数据校验机制,系统的 Action 类都应该通过继承 ActionSupport 类来实现。ActionSupport类为完成类型转换错误处理、数据校验实现了许多基础工作。
注意