服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

webwork2结合spring, hibernate


 
 webwork2结合spring, hibernate
从user说起,包括创建/修改/删除user,以及对user的列表,先看webwork2的action代码
为简单说明问题,不考虑什么interceptor, duplicated submit, validation,等问题

创建/修改/删除user:useraction.java相关代码

java代码: 

 1  usermanager usermanager;
 2  
3  public void setusermanager(usermanager) {
...}
 4      this.usermanager = usermanager;
 5  }
 6  
7  public string create() {
...}
 8      usermanager.create(getuser());
 9  }
 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代码: 

 1  usermanager usermanager;
 2  
3  public void setusermanager(usermanager) {
...}
 4      this.usermanager = usermanager;
 5  }
 6  // usermanager的获取可放在一个user的根类声明,如abstractuseraction,这里重复为了看得清楚些
 7  
8  public list getallusers() {
...}
 9      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代码: 

1  public class hibernatevehicledao extends caryohibernateobjectdao implements vehicledao {
...}
 2     
 3          class vehicleclass;
 4  
5          public class getpersistentclass() {
...}
 6                  return vehicleclass != null ? vehicleclass : (vehicleclass = vehicle.class);
 7          }
 8         
9          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>
 
 
 
    
 

 

 

扫描关注微信公众号