RSS
热门关键字:  java  Ajax  JSP  JSF  Struts
当前位置 : 首页>Java>列表

WebWork的拦截器(Interceptor)使用方法

来源: 作者: 时间:2007-08-18 点击:
 

拦截器基本使用方法

 

在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异常.

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
Google Adsense
相关文章