Posted on 2006-05-16 16:15
qiqijava 阅读(2049)
评论(5) 编辑 收藏 所属分类:
Tag
ValueList中四个主要的接口与实现类
1. ValueListInfo 封装Map对象,含有排序、分页、聚焦和提交表单等相关信息
2. ValueListHandler接口,实现类:DefaultValueListHandlerImpl 它是ValueList中的核心类,其定义在配置文件中,调用getValueList方法返回ValueList对象
3. ValueList接口,实现类:DefaultListBackedValueList 它包含两个对象,1)域对象的结果集,2)ValueListInfo对象
4. ValueListAdapter接口,有以下几种实现
○ DefaultWrapperAdapter jdbc操作的适配器
○ EventLogAdapter 日志操作的适配器
○ FileSystemAdapter 文件系统操作的适配器
○ HibernateAdapter hibernate操作的适配器
○ MappingSqlQueryAdapter iBATIS的sqlMap适配器
具体实现流程
第一步:从请求中构造ValueListInfo对象,由帮助类ValueListRequestUtil实现
从请求中取得URL的参数和系统默认值来构造ValueListInfo对象
第二步:得到Adapter的实现类
调用getBean方法,从配置文件中取得ValueListHandler实现类,调用getValueList方法,得到实体key对应的Adapter,如:
<bean class="net.mlw.vlh.adapter.hibernate3.HibernateAdapter">
<property name="sessionFactory"><ref bean="mySessionFactory"/></property>
<property name="defaultNumberPerPage"><value>10</value></property>
<property name="defaultSortColumn"><value>messageIn.date</value></property>
<property name="defaultSortDirection"><value>desc</value></property>
<property name="hql">
<value>
from User AS vo
/~certNumber: where vo.certNumber like {certNumber} ~/
/~name: where vo.name like {name} ~/
/~certHolder: where vo.certHolder like {certHolder} ~/
/~groupName: where vo.group.name like {groupName} ~/
/~sortColumn: ORDER BY vo.[sortColumn] [sortDirection]~/
</value>
</property>
<property name="defaultFocusPropertyObjectAlias"><value>vo</value></property>
<property name="maxRowsForFocus"><value>160000</value></property>
<property name="removeEmptyStrings"><value>true</value></property>
</bean>
第三步:构造ValueList对象,使用DefaultListBackedValueList实现类
用适配器取得结果集(如HibernateAdapter),封装ValueList对象
ValueList中包含两个对象,1)域对象的结果集,2)ValueListInfo对象(分页的相关息)
第四步:把ValueList对象放到WEB的作用域中
HQL说明:主要通过迭代动态生成HQL语句
from User AS vo
/~certNumber: where vo.certNumber like {certNumber} ~/ (1)
/~name: where vo.name like {name} ~/ (2)
/~certHolder: where vo.certHolder like {certHolder} ~/ (3)
/~groupName: where vo.group.name like {groupName} ~/ (4)
/~sortColumn: ORDER BY vo.[sortColumn] [sortDirection]~/ (5)
(1)如果ValueListInfo中包含certNumber变量,如certNumber=100,则vo.certNumber like=100,生成HQL=from User AS vo where vo.certNumber like=100;
如果ValueListInfo中不包含certNumber变量,生成HQL=from User AS vo (1)行由空白代替
其它以此类推
注意:传给HQL的每个变量都要单独占一行,就算是类似between and 的语句也要分两行写