服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

webwork的拦截器(interceptor)使用方法

拦截器基本使用方法

在webwork配置文件中可设置action请求是否要使用interceptor功能.如下:

<action name="getbusilogiclist"
 class="com.supporter.prj.prjman.design.designelementaction">
  <result name="success" type="dispatcher">
  <param name="location">/prjman/design/busi_logic_edit.jsp</param>
  </result>   
</action> 
<action name="savebusilogic" 
class="com.supporter.prj.prjman.design.designelementaction" 
method="save">
  <result name="success" type="dispatcher">
  <param name="location">/prjman/design/busi_logic_edit.jsp</param>
  </result> 
  <interceptor-ref name="validationworkflowstack"/>
</action>

如上例,调用getbusilogiclist.action时,如调用页面(来源页面)有designelementaction中相应的get方法.但webwork不会自动赋值.以就是不会去调用get方法,不会对request的值进行拦截.但可以使用this.getrequestpara("xxx")等方法主动却获得请求参数(param).

若使用了,则webwork拦截器机制将主动调用页面中的相关的get方法.也就是说类中的值将会被页面中传入的值强制覆盖.

还要补充一点,就是webwrok值堆栈(stack)是在"整个"请求(request)范围内是有效的. 其实就是request对象的生命周期相一致.比如从a页面提交到b页面,再从b页面又提交到c页面.可以说从a到c算一个请求.也就是a页面的得到的值会被带到c页面中.

最近做的这个业务逻辑模块中只包括业务逻辑列表一个页面busi_logic_edit.jsp,访问方式就是通过调用getbusilogiclist.action,然后在designelementaction中通过this.getrequestpara("designelement.eleid")方法得到指定功能模块的业务逻辑集合.这个列表页面其实同时也是编辑页面,当调用savebusilogic.action时,作用是进行批量保存,若result是指向getbusilogiclist.action,而不是busi_logic_edit.jsp页面时,就要求getbusilogiclist.action,这个action不能使用拦截器,否则就会出现数组越界异常.知道这是为什么吗?

原因就是.由于当前界面就是busi_logic_edit.jsp.而在这个jsp中会出现如下的代码:

<textarea name="designelement.businesslogiclistforinput[<suww:elementindex/>].content"
 style="border:0;width:100%;height:60">
<suww:property value="content" />

如果getbusilogiclist.action使用了拦截器,则会调用designelement的getbusinesslogiclistforinput方法,则当删除列表中某条记录时,busi_logic_edit.jsp页面中的数据会与getbusinesslogiclistforinput的数据不一致,最终将导致java.lang.indexoutofboundsexception异常.

(t007)


扫描关注微信公众号