通常 , 一个Action中只能完成一种业务操作 , 通过扩展org.apache.struts.actions.DispatchAction 实现的Action类可以完成一组相关的集中业务操作 . 扩展自DispatchAction的Action类中不必定义execute方法 , 而是创建一些实现实际业务操作的方法 , 如doAdd() , doSubtract() 等, 但这些业务方法的传入参数和返回值 一定要和execute方法的一致 .
在请求页面中使用
function doSubmit(op){
document.forms[0].operate.value=op;
document.forms[0].submit();
}
来动态获取我们单击的是什么操作 .
然后在下面的form 中
<input type="button" value="+" οnclick="doSubmit('doAdd')">
<input type="button" value="-" οnclick="doSubmit('doSubTract')">
<input type="button" value="*" οnclick="doSubmit('doMultiply')">
<input type="button" value="/" οnclick="doSubmit('doDivide')">
通过不同的操作,将不同的值传进去.
在struts-config.xml中和其它的Action 一样, 只是多了一个parameter属性, parameter="operation" 这个属性告诉Struts , 需要到请求对象中寻找一个 name为 operation的表单元素的值 , 根据那个值 来判断我们需要使用自定义Action的那个方法来执行这个操作了 .
使用DispatchAction将相关的操作组织在一起是项目中经常采用的方式 . 一般,对应同一个数据库表的操作经常组织在一起, 比如: 添加订单, 删除订单, 修改订单, 提交订单和查询订单的操作通常组织在同一个ActionBean中. 当然Action的组织以业务为主要依据 , 订单明细显然对应另外一个表, 但也是订单操作, 也尝尝和其它订单操作放在同一个ActionBean中 .
在DispatchAction Bean中 , 方法名称的前缀也常常遵循一定的规则: 转到编辑页面的方法常命名为toEdit , 执行编辑操作的方法常常命名为doEdit ; 依稀类推 , 命名为doAdd , doList , doDel 等 . toXxx表示转到Xxx页面 , 而doXxx表示执行Xxx操作 , 通过这样的命名可以是程序逻辑更清晰 , 减少出错的几率 .