风人园

弱水三千,只取一瓢,便能解渴;佛法无边,奉行一法,便能得益。
随笔 - 99, 文章 - 181, 评论 - 56, 引用 - 0
数据加载中……

SpringSide的Struts封装

SpringSide的Struts封装

1.概述 

   SpringSide对Struts做了两层封装:

   第一层:StrutsAction,继承于DispatchAction,附带一些Utils函数,另外注册了几个Converter。

   第二层:StruttsEntityAction,继承于StrutsAction, 演示了如何为单个对象的CRUD操作(增删改查)封装了默认Action,子类只需要范型声明所管理的对象类型和管理类型,即拥有CRUD操作的能力。

    大家各自项目的习惯不同,流程,可以参考SpringSide的封装,封装自己的版本。

    典型子类代码如下:

								public class UserAction extends StrutsEntityAction<User,UserManager> {
     private UserManager userManager;
     public void setUserManager(UserManager userManager) {
           this.userManager = userManager;
     }
   }

   第一 extends StrutsEntityAction<User,UserManager>,声明管理的Entity类型是User,管理的Entity是UserManager,UserManager必须实现EntityDao<T>接口;
   第二 定义userManager用于依赖注入的setter函数;

2.原理

     StrutsEntityAction 会持有一个EntityDao接口的实体来做CRUD的操作,子类通过在泛型中声明UserAction<User, UserManager>,自动查找属性中类型为UserManager的属性作为EntityDao。如果子类有多个UserManager属性(很少的情况),就需自行实现getEntityManager()函数。

     CRUD现在主要封装了list、edit、view、save、delete 5个流程,一般会调用doListEntity、doGetEntity、doNewEntity、doSaveEntity(),doDeleteEntity 5个业务函数去做相应的业务操作。

     在controller中很重要的request 数据与POJO的转换,由initEntity、initForm  两个函数完成。

     initEntity 先调用bindObject 函数用BeanUtils 直接copy lazyBean的FormBean 和 Entity POJO,然后调用子类的onInitEntity()函数。initForm是同样的原理。

     通常还有一些辅助的对象,比如Book 修改页要有Category列表做下拉选择框,这些辅助对象统一子类重载onRefrence()函数放入request.attributes.

3.扩展与客户化

   EntityAction必须预留足够的扩展点给子类重载,具体函数注释见StrutsEntityAction的JavaDoc, 包括:

    1.list、edit、view、save、delete: 五种action的流程封装;
   2.doListEntity、doGetEntity、doNewEntity、doSaveEntity(),doDeleteEntity: 五种业务函数调用;
   3.initEntity、initForm : FormBean与业务对象的初始化函数及refrenceData,onInitForm,onInitEntity 三个回调函数;
   4.savedMessage、deletedMessage: 两种业务操作成功后显示的信息的回调函数。

  几个回调函数在子类重载,而如果几个封装函数不合心意,请重新扩展一个基类或完全重新封装。

posted on 2006-12-16 14:35 风人园 阅读(584) 评论(0)  编辑  收藏 所属分类: Struts