Chinaunix首页 | 论坛 | 博客
  • 博客访问: 30465494
  • 博文数量: 708
  • 博客积分: 12163
  • 博客等级: 上将
  • 技术积分: 8240
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-04 20:59
文章分类

全部博文(708)

分类: Java

2008-03-17 11:41:32

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
 2     userManager
 3     user.JSP
 4

 


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
 2    
 3

 


对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
 2     userManager
 3     listuser.jsp
 4

 


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

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

 1
 2 userId:
 3 userName:
 4
 5 
 6
 7 userId:
 8 userName:
 9
 


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

Spring+hibernate的部分跟dhj1版主的相近,
偶就不重复了。只说一些不同的地方
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  2     from Vehicle vehicle
 3 ]]>

阅读(1719) | 评论(0) | 转发(0) |
0

上一篇:在Java中处理日志记录

下一篇:关于log4j

给主人留下些什么吧!~~