WebWork拦截器(做个种子先,内容陆续添加)

来源:互联网 发布:python logger 红色 编辑:程序博客网 时间:2024/06/05 10:45

1.Alias Interceptor
可以为传入的参数(request parameters)设定别名,而不会将原有的名称删除。
使用方法:
在<action>中做如下配置:
<!--配置别名。前面的是原来的名字,后面的是新创建的别名-->
<param name="aliases">#{'userName':'name','userPassword':'password'}</param>
<!--别名拦截器,应该位于params拦截器前-->
<interceptor-ref name="alias">
      <!--可选的参数,指定一个别名映射的Action Parameter的Key,默认为alias-->
      <param name="aliasesKey">alias</param>
</interceptor-ref>
<interceptor-ref name="params"/>

如果在Action中只有别名对应的属性,而没有原名对应的属性,如只有name属性而没有userName属性,在开发模式下(在webwork.properties中设定webwork.devMode = true)会报告异常。
解决的方法是让Action实现com.opensymphony.xwork.interceptor.ParameterNameAware接口,在acceptableParameterName方法中屏蔽掉原始的属性名
个人感觉:在使用ORM映射的时候可以通过这个拦截器避免直接暴露数据库字段名。

2.Chaining Interceptor
在Action链中,从一个Action中将properties拷贝到另一个Action中。可以指定两个参数:includes和excludes 来控制哪些property将在两个Action之间进行拷贝。只能指定
includes和excludes中的一个,如果两个同事指定将导致不确定的行为。
在WebWork的文档中还提到,如果一个对象实现了com.opensymphony.xwork.Unchainable标识接口将不会在Action Chain之间拷贝,参考ChainingInterceptord的源代码可以
看到:
       ......
       if (!(o instanceof Unchainable)) {
                  
 OgnlUtil.copy(o, invocation.getAction(), ctxMap, excludes, includes);
                 
       }
       ......
但是我试验的时候Unchainable似乎没有起作用,对象依然被复制了。这很让人郁闷。

3.Execute and Wait Interceptor
当一个Action需要长时间运行的时候,可以通过Execute and Wait Interceptor 呈现一个等待页面,直到Action执行完毕并返回结果。
使用ExecuteAndWaitInterceptor需要注意几点:
(1)executeAndWait必须位于InterceptorStack的末尾;
(2)如果没有提供一个名为"wait"的结果,WebWork将自动创建一个等待结果。该等待结果用FreeMarker编写,如果没有加载FreeMarker引擎将无法运行。如果你不希望这样,就必须
提供自己的等待页面。
(3)无论等待结果是否被返回,当前的action都将在后台运行并被置于栈顶。这允许你显示进程数据,比如一个技术。让页面自动刷新去访问action,可以做出貌似自动刷新的进度条。
(4)拦截器同样支持使用一个初始的等待延迟。等待延迟是在向用户呈现等待页面前等待的时间,单位为毫秒。
(5)在等待期间,将每隔100毫秒检查一下action石佛运行完毕。
(6)由于action将运行于一个sperate thread(??),你将不能使用ActionContext,因为他是一个ThereadLocal。这意味着,如果你需要访问session,就需要实现SessionAware接口,而非ActionContext.getSesion().

原创粉丝点击