Author: 李李
WebWork是一个强大的基于Web的MVC框架, 它构建在一个command模式的框架XWork
之上. WebWork真正的力量在于它内在蕴涵的简单和协作的理念.
使用WebWork将有助于最小化代码,并允许开发人员更多的关注业务逻辑(business logic)和建模(modeling),
而不是关注构建基于web的应用程序必需的铅管系统(plumbing).
------ 摘自 Webwork中文文档概述
官方文档
http://wiki.opensymphony.com/display/WW/WebWork官方文档中文版
http://wiki.javascud.org/display/ww2cndoc/WebWork其他中文资料
http://webwork.javascud.org/index.php?option=com_remository&Itemid=30&func=select&id=3
目前采用Sitemesh作为装饰器,FreeMarker作为页面模板,对图书的CRUD流程进行了演示,其中用到ExtremeTable作为列表显示组件。其中DAO/SERVICE层采用的是开源项目:bba96
ModelDriven Inteceptor 可首先调用 getModel() 方法,从而可以统一做model 的初始化工作,主要服务于统一的CRUD方法,参考 org.springside.modules.webwork.action.SSModelActionSupport,若不采用范型,则每个action均需定义自己的 getModel() 方法
ModelDriven Inteceptor 会把 model 压入 Stack
- 在性能要求严格的环境下不用 Webwork 的 Model Driven 接口,改用自行实现的Inteceptor达到上述主要目的
- 在要求客户端校验的时候,Validation不用 model visitor 模式(其它的仍可利用 Model Driven 接口)
采用Sitemesh可以很好的分离内容页面与功能性页面,可让开发者只关注内容页面。
/WEB-INF下放置功能性页面,例如修饰页面,导航页面,Freemarker宏,/ 下放置内容页面,即 Webwork Action 的 result 指定页面,与 Action 的 Namespace 一致,方便查找。
如果你使用spring+hibernate,而又不喜欢hibernate criteria的麻烦,不妨尝试一下bba96,作为基于Hibernate+Spring的持久层的架构应用,完全可以独立加入到你的项目中,让你可以把主要精力放到业务方面。
com.bba96.tiger.service.DefaultEntityManager 是使用最多的类,提供了很多单层逻辑的便利方法给你使用,其中也包括执行hsql或者sql查询/更新的方法,如果你要多层次逻辑的条件查询可以自己组装QueryObject,参见com.bba96.tiger.util.QueryWebUtils的main函数。
同时bba96还提供给你在view层自由增加查询的能力,使用起来很方便。以下就是SpringSide中 org.springside.modules.webwork.action.SSActionSupport 使用bba96实现方便的view查询的例子:
protected QueryWebParameter search;//定义接受查询参数的对象
public QueryWebParameter getSearch() {
return search;
}
public void setSearch(QueryWebParameter search) {
this.search = search;
}
public Page getPaginationResults() {
//此处可对search处理,进行参数删减以实现灵活的功能或是增强安全
if (search == null) {
search = new QueryWebParameter();
}
if (search.getPageSize() <= 0) {
search.setPageSize(Constants.DEFAULT_PAGE_SIZE);//设置默认每页记录数
}
return getEntityManager().findByWebParameter(getEntityClass(), search);//执行查询返回分页的结果
}
action中就是上面这段话就可对所有的对象实现基本的查询功能。在jsp的要增加对应字段的查询只需遵循以下写法:
对每个需要查询的属性要定义三个变量,search.name, search.operator,
search.value
其中search对应上面的QueryWebParameter的变量search
name对应属性名
若是关联其它对象的非主键属性需用冒号定义别名。
规则 --
描述关联对象的属性:别名.该关联对象的属性
举例 --
groups:g.name,支持多极别名,如groups.g.users:gu.name,这里gu就是g.users的别名
operator对应逻辑操作符,参考com.bba96.tiger.query.QueryParam
value对应值,默认为String类型,可在最后加下划线加类型如_Long或_Date?mm-DD
具体写法参见/webapps/ww/admin/book_list.ftl,关于更多view的逻辑,参见com.bba96.tiger.util.QueryWebUtils
在Spring中的配置也非常简单,如下所示,更新信息参见src/resources/applicationContext-webwork.xml
<bean id="objectDao" class="com.bba96.tiger.dao.hibernate.HibernateObjectDAO">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="defaultEntityManager" parent="baseTxService">
<property name="target">
<bean class="com.bba96.tiger.service.DefaultEntityManager">
<property name="objectDAO">
<ref local="objectDao"/>
</property>
</bean>
</property>
</bean>