浏览 25624 次
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2004-10-03
从User说起,包括创建/修改/删除User,以及对User的列表,先看Webwork2的Action代码 为简单说明问题,不考虑什么Interceptor, Duplicated Submit, Validation,等问题 创建/修改/删除User:UserAction.java相关代码 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"; } xwork.xml相关代码 <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> 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 <bean id="userManager" class="com.caryo.user.DefaultUserManager"> <property name="userDAO"><ref local="userDAO"/></property> </bean> 对User的列表:ListUserAction.java相关片断 UserManager userManager; public void setUserManager(UserManager); { this.userManager = userManager; } // userManager的获取可放在一个User的根类声明,如AbstractUserAction,这里重复为了看得清楚些 public List getAllUsers(); { userManager.getAllUsers();; } public List getOnlineUsers(); { userManager.getOnlineUsers();; } xwork.xml相关代码 <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> 这样对应的url就是listuser.action,无command模式下会自动执行public String execute()这一方法, Default是一个返回"success"的空方法,当然你也可以重写此方法,例如做校验等等。 listuser.jsp中使用webwork taglib打出User列表的片断 <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> 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.iteye.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中 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");; } } vehicle.hbm.xml相关代码 <query name="caryo.vehicle_findAllGlobalVehicles"><![CDATA[ from Vehicle vehicle ]]></query> 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间: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中 |
|
返回顶楼 | |