Webwork2结合Spring, Hibernate

Webwork2结合Spring, Hibernate
从User说起,包括创建/修改/删除User,以及对User的列表,先看Webwork2的Action代码
为简单说明问题,不考虑什么Interceptor, Duplicated Submit, Validation,等问题

创建/修改/删除User:UserAction.java相关代码

java代码: 

   UserManager userManager;
   
  public void setUserManager (UserManager ) {
       this. userManager = userManager;
    }
   
  public String create ( ) {
       userManager. create (getUser ( ) );
    }
  10 
11  public String modify ( ) {
  12     userManager. modify (modifyUser ( ) )
  13     return "success";
  14  }
  15 
16  public String remove ( ) {
  17     userManager. remove (getUser ( ) )
  18     return "success";
  19  }



xwork.xml相关代码
java代码: 

  1 < action name="user" class="com. caryo. user. actions. UserAction">
  2     <external-ref name="userManager">userManager</external-ref>
  3     <result name="success" type="dispatcher">user. jsp</result>
  4 </ action>



webwork action会自动接受页面上传过来的信息,而且还支持JavaBean的BeanInfo(BeanInfo没用过,偶
都是直接在action中完成获取属性,以及类型转换与校验的工作的)
Webwork2很方便的支持了Command模式,允许一个Action拥有多个Command,对应的url调用
user!create.action, user!modify.action, user!remove.action,会对应的调用UserAction中的方法,
然后根据方法返回值去寻找对应的View,return "sucess" 就会forward到user.jsp。
其中的userManager是Spring中applicationContext中定义的bean

java代码: 

  1 <bean id="userManager" class="com. caryo. user. DefaultUserManager">
  2     <property name="userDAO"><ref local="userDAO"/></property>
  3 </bean>



对User的列表:ListUserAction.java相关片断

java代码: 

   UserManager userManager;
   
  public void setUserManager (UserManager ) {
       this. userManager = userManager;
    }
    // userManager的获取可放在一个User的根类声明,如AbstractUserAction,这里重复为了看得清楚些
   
  public List getAllUsers ( ) {
       userManager. getAllUsers ( );
  10  }
  11 
12  public List getOnlineUsers ( ) {
  13     userManager. getOnlineUsers ( );
  14  }



xwork.xml相关代码
java代码: 

  1 < action name="listuser" class="com. caryo. user. actions. ListUserAction">
  2     <external-ref name="userManager">userManager</external-ref>
  3     <result name="success" type="dispatcher">listuser. jsp</result>
  4 </ action>



这样对应的url就是listuser.action,无command模式下会自动执行public String execute()这一方法,
Default是一个返回"success"的空方法,当然你也可以重写此方法,例如做校验等等。

listuser.jsp中使用webwork taglib打出User列表的片断
java代码: 

  1 <ww:iteraor value="allUsers">
  2 userId: <ww:property value="id" />
  3 userName: <ww:property value="name" />
  4 </ww:iterator>
  5 
  6 <ww:iteraor value="onlineUsers">
  7 userId: <ww:property value="id" />
  8 userName: <ww:property value="name" />
  9 </ww:iterator>



webwork taglib功能比较强大,其中还可使用带参数的方法调用,而且在逻辑控制等方面都考虑的比较完善
详细参见 http://wiki.opensymphony.com/pages/viewpage.action?pageId=1876
只要设计合理,基本上使用其taglib就可以控制整个view,包括复杂的页面。尽管也支持Velocity, Freemarker等
不过考虑到性能,推荐还是使用jsp view。
大型网站的UI层应该尽可能的薄,JSP不易维护,我觉得taglib是可接受的厚度的上限了。

Spring+hibernate的部分跟dhj1版主的相近,http://forum.javaeye.com/viewtopic.php?t=7925
偶就不重复了。只说一些不同的地方
1. web.xml 可以使用listener来初始化基本信息而不是用servlet
2. 在Session in DAO中,用iterator返回数据应该是不行的,那么要获取count,不是iterator.next()
也不是获取整个list,然后list.size(),而应是一个list.get(0);
3. 可将HQL放到对应的hbm.xml中
java代码: 

  public class HibernateVehicleDAO extends CaryoHibernateObjectDAO implements VehicleDAO {
      
           Class vehicleClass;
   
         public Class getPersistentClass ( ) {
                   return vehicleClass != null ? vehicleClass : (vehicleClass = Vehicle. class );
           }
          
         public Vehicle getById ( final long id ) {
  10         return (Vehicle ) getByClassId (id );
  11         }
  12 
13         public List findAllGlobalVehicles ( ) {
  14                 return findNamedQuery ("caryo. vehicle_findAllGlobalVehicles" );
  15         }
  16  }



vehicle.hbm.xml相关代码
java代码: 

  1 <query name="caryo. vehicle_findAllGlobalVehicles"><! [CDATA [
  2     from Vehicle vehicle
  3  ] ]></query>

  浏览发表者的主页
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值