valuelist可通过ValueListHandlerHelper来进行分页查询。
使用ValueListHandlerHelper时,必需要设置ValueListHandlerHandler处理器.
这里主要有ValueListHandler处理器和adapter适配器两个概念。
adapter主要有用来处理分页,需要继承ValueListAdapter类,并实现ValueList getValueList(String name, ValueListInfo info)方法.
值得注意的是如果我们用jdbc且继承了它的AbstractJdbcAdapter类,最好重写getValueList方法,因为它的实现方法效率极低。它是通过查询到一个结果集后再用游标来分页.
而且不是变量绑定方式。比如如下的/~name:and name = '[name]'~/ 如果name变量为 ipod' or '1=1 ,这时它执行的sql为 select id, name from td_product where 1=1 and name = 'clothes1' or '1=1'
处理器类主要处理adapter返回的valuelist对象,比如根据AdapterType进行相关操作?很奇怪,这种操作有意义吗?
<!-- 适配器 -->
<bean id="defConfig" class="com.yeepay.valuelist.MapAdapter" singleton="false" >
<property name="dataSource"><ref bean="dataSource"/></property>
<property name="defaultNumberPerPage"><value>3</value></property>
<property name="defaultSortColumn"><value>id</value></property>
<property name="defaultSortDirection"><value>desc</value></property>
</bean>
<!-- 处理器 -->
<bean id="valueListHandler" class="net.mlw.vlh.DefaultValueListHandlerImpl">
<!-- 适配器 -->
<property name="config.adapters">
<map>
<entry key="productQuery">
<bean parent="defConfig">
<property name="sql">
<value>
<![CDATA[
select id, name from td_product where 1=1
/~name:and name = '[name]'~/
]]>
</value>
</property>
</bean>
</entry>
</map>
</property>
</bean>
<!-- helper -->
<bean id="valueListHelper" class="net.mlw.vlh.web.mvc.ValueListHandlerHelper">
<property name="valueListHandler">
<ref bean="valueListHandler" />
</property>
</bean>
页面使用:首先要使用vlh:root标签,因为下面的<vlh:row,vlh:column及vlh:paging标签才能使用。root相当于初始化准备了一些数据。其它标签都是依赖于父标签来获取这些数据。
//list表示从request里获取ValueList或List数据。url表示分页里的url应该以什么开头,?表示以?开头. includeParameters=表示分页url需要拼哪些请求参数.*表示所有request里的参数.
<vlh:root value="list" url="?" includeParameters="*" >
<table>
<vlh:row bean="test" display="" >
<vlh:column sum="id" property="id" />
<vlh:column property="name" />
</vlh:row>
</table>
//分页信息,pages表示要显示几个分页标签,showSummary表示是否显示总数
<vlh:paging pages="3" showSummary="true" >
<c:out value="${page}"/>
</vlh:paging>
</vlh:root>
valuelist还有其它特性,比如排序等。总体来讲valuelist不是个好组件,除非是一个很小的网站,否则不建议使用。
当然我们可以自己扩展它的组件和接口来改善,不过它本身为我们做得太少,那样的话不是很必要在它的基础上做,完全可以抛开它。