This page last changed on Dec 14, 2004 by casey.

综述

截取器可以动态截取活动调用. 它为开发者提供了在活动执行前后执行其他代码的机会. 它也能阻止活动执行. 截取器还为开发者提供了可重用的方式来封装公共功能并将它应用到一个或多个活动中. 更多信息参见XWork: 截取器. Below describes built in Webwork interceptors.

Webwork与XWork的截取器

截取器类也能用xwork配置文件指定的名值对(key-value pair)进行定义. 下列名字定义在webwork-default.xml文件中. 如果你扩展了webwork-default包, 你就可以使用下列名字. 否则必须在<interceptors>元素中使用名字和类名定义.
名字描述
timer输出活动(包含嵌套的截取器和视图)执行时间
logger输出活动的名字
chain使得前一个活动的属性在当前活动中可用. 通常与<result type="chain">元素(在前一个活动定义中)一起使用. 更多内容参阅链接截取器
static-params把xwork.xml中定义的参数设置到活动中. 相当于包含在<action />标签中的<param />标签.
params将请求的参数设置到活动类中.
model-driven如果活动实现ModelDriven, 将getModel()的结果压入值栈.
component激活注册的组件并允许活动使用. 请参考components.xml
token在活动中检查合法令牌(token), 防止表单的重复提交
token-session同上, 但是在接到非法令牌时将提交的数据保存在session中
validation使用定义在{Action}-validation.xml中的校验器进行校验
workflow调用活动类中的validate方法. 如果活动产生了错误将返回到输入视图.
servlet-config提供访问HttpServletRequest和HttpServletResponse的途径(使用前请三思, 因为它使你的代码与Servlet接口绑定在一起)
prepare如果活动实现Preparable接口, 调用它的prepare ()方法.
conversionError 将ActionContext中的数据转换错误添加到活动的字段错误中
fileUpload简化访问上传文件的截取器. 更多信息请查看javadoc
execAndWait在后台执行服务并向用户发送一个中间等待页面. 参见: ExecuteAndWaitInterceptor

截取器执行顺序

截取器提供了优异的方式包装前/后处理. 这一概念减少了代码重复 (考虑AOP[面向方面编程]的概念).
<interceptor-stack name="xaStack"> 
  <interceptor-ref name="thisWillRunFirstInterceptor"/>
  <interceptor-ref name="thisWillRunNextInterceptor"/>
  <interceptor-ref name="followedByThisInterceptor"/>
  <interceptor-ref name="thisWillRunLastInterceptor"/>
</interceptor-stack>

注意: 某些截取器会中断栈/链/流程, 因此顺序十分重要.

实现com.opensymphony.xwork.interceptor.PreResultListener接口的截取器将在活动执行之后, 结果执行之前执行.
thisWillRunFirstInterceptor
  thisWillRunNextInterceptor
    followedByThisInterceptor
      thisWillRunLastInterceptor
        MyAction1
        MyAction2 (chain)
        MyPreResultListener  
        MyResult (result)
      thisWillRunLastInterceptor
    followedByThisInterceptor
  thisWillRunNextInterceptor
thisWillRunFirstInterceptor
Document generated by Confluence on Dec 14, 2004 16:36