浏览 19366 次
|
该帖已经被评为精华帖
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2004-10-03
嘿嘿,偶来介绍下Webwork2结合Spring, Hibernate,Default认为对Spring,Hibernate有一定了解。
从User说起,包括创建/修改/删除User,以及对User的列表,先看Webwork2的Action代码 为简单说明问题,不考虑什么Interceptor, Duplicated Submit, Validation,等问题 创建/修改/删除User:UserAction.java相关代码 [code:1]UserManager userManager; public void setUserManager(UserManager) { this.userManager = userManager; } public String create() { userManager.create(getUser()); } public String modify() { userManager.modify(modifyUser()) return "success"; } public String remove() { userManager.remove(getUser()) return "success"; }[/code:1] xwork.xml相关代码 [code:1]<action name="user" class="com.caryo.user.actions.UserAction"> <external-ref name="userManager">userManager</external-ref> <result name="success" type="dispatcher">user.jsp</result> </action>[/code:1] 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 [code:1]<bean id="userManager" class="com.caryo.user.DefaultUserManager"> <property name="userDAO"><ref local="userDAO"/></property> </bean>[/code:1] 对User的列表:ListUserAction.java相关片断 [code:1]UserManager userManager; public void setUserManager(UserManager) { this.userManager = userManager; } // userManager的获取可放在一个User的根类声明,如AbstractUserAction,这里重复为了看得清楚些 public List getAllUsers() { userManager.getAllUsers(); } public List getOnlineUsers() { userManager.getOnlineUsers(); }[/code:1] xwork.xml相关代码 [code:1]<action name="listuser" class="com.caryo.user.actions.ListUserAction"> <external-ref name="userManager">userManager</external-ref> <result name="success" type="dispatcher">listuser.jsp</result> </action>[/code:1] 这样对应的url就是listuser.action,无command模式下会自动执行public String execute()这一方法, Default是一个返回"success"的空方法,当然你也可以重写此方法,例如做校验等等。 listuser.jsp中使用webwork taglib打出User列表的片断 [code:1]<ww:iteraor value="allUsers"> userId: <ww:property value="id" /> userName: <ww:property value="name" /> </ww:iterator> <ww:iteraor value="onlineUsers"> userId: <ww:property value="id" /> userName: <ww:property value="name" /> </ww:iterator>[/code:1] 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中 [code:1]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) { return (Vehicle) getByClassId(id); } public List findAllGlobalVehicles() { return findNamedQuery("caryo.vehicle_findAllGlobalVehicles"); } }[/code:1] vehicle.hbm.xml相关代码 [code:1]<query name="caryo.vehicle_findAllGlobalVehicles"><![CDATA[ from Vehicle vehicle ]]></query>[/code:1] 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2004-10-08
楼主辛苦了,这种结合是不错的模式
|
|
| 返回顶楼 | |
|
最后更新时间:2005-08-12
最好的体验就是做出点能用的东西来
|
|
| 返回顶楼 | |
|
最后更新时间:2005-08-22
我也是用楼主相同的方法进行spring+webwork 的结合,为什么我的就抛异常呢?
日志出了这样的警告 2005-08-22 09:17:33,437 http8088-Processor24 WARN (OgnlUtil.java:281) - Caught OgnlException while setting property 'usertabledao' on type 'com.yangqi.testhibernate.action.usertable.AddUsertableAction'. ognl.NoSuchPropertyException: usertabledao 我的xwork.xml <interceptors> <interceptor name="reference-resolver" class="com.opensymphony.xwork.interceptor.ExternalReferencesInterceptor"/> <interceptor-stack name="myDefaultWebStack"> <interceptor-ref name="reference-resolver"/> <interceptor-ref name="static-params"/> <interceptor-ref name="params"/> <interceptor-ref name="model-driven"/> </interceptor-stack> </interceptors> <default-interceptor-ref name="myDefaultWebStack"/> <action name="adduserAction" class="com.yangqi.testhibernate.action.usertable.AddUsertableAction"> <external-ref name="usertableDao">usertableDao</external-ref> <result name="input" type="dispatcher">adduser.jsp</result> <result name="success" type="chain">browseUsertableAction</result> </action> 我的applicationContext.xml <bean id="usertabledao" class="com.yangqi.testhibernate.dao.UsertableDao" singleton="true" > <property name="sessionFactory"> <ref local="sessionFactory"/> </property> </bean> |
|
| 返回顶楼 | |
|
最后更新时间:2005-08-22
jert项目可以参考,里面很多基础代码演示了spring,hibernate, ww的整合
|
|
| 返回顶楼 | |
|
最后更新时间:2005-09-11
to ywlqi:
你忘了给action的 dao对象加个setXXX了吧。 PS: 楼主比你的多了一层(usermanager),即多了业务层,这样做可以减少action和后台的耦合,曾加业务对象(usermanager)的重用,建议你加上这以层,而不是像你现在这样直接吧DAO写到Action中 |
|
| 返回顶楼 | |








