拦截器基本使用方法
在webwork配置文件中可设置action请求是否要使用interceptor功能.如下:
|
如上例,调用getBusiLogicList.action时,如调用页面(来源页面)有DesignElementAction中相应的get方法.但webwork不会自动赋值.以就是不会去调用get方法,不会对request的值进行拦截.但可以使用this.getRequestPara("XXX")等方法主动却获得请求参数(param).
若使用了
还要补充一点,就是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中会出现如下的代码:
|
如果getBusiLogicList.action使用了拦截器,则会调用DesignElement的getBusinessLogicListForInput方法,则当删除列表中某条记录时,busi_logic_edit.jsp页面中的数据会与getBusinessLogicListForInput的数据不一致,最终将导致java.lang.IndexOutOfBoundsException异常.

