集成valueList配置方法:
1.在
http://valuelist.sourceforge.net/index.html官方网站下载最新版valueList war包,其中包含了jar包和实例等所有相关内容。
2.valueList.jar,valuelist.tld拷贝到WEB-INF下(该文件也是从ValueList.war中解压出来的)。
3.创建一个applicationContext-valueList.xml文件,并且添加valuelist的entry。
xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd ">
<bean id="valueListHelper" class="net.mlw.vlh.web.mvc.ValueListHandlerHelper">
<property name="valueListHandler">
<ref bean="valueListHandler"/>
</property>
</bean>
<bean id="valueListHandler" class="net.mlw.vlh.DefaultValueListHandlerImpl">
<property name="config.adapters">
<map>
<entry key="testAdapter">
<bean class="net.mlw.vlh.adapter.jdbc.dynabean.DefaultDynaBeanAdapter">
<property name="dataSource"><ref bean="dataSource"/></property>
<property name="useName"><value>false</value></property>
<property name="showSql"><value>true</value></property>
<property name="defaultNumberPerPage"><value>10</value></property>
<property name="defaultSortDirection"><value>desc</value></property>
<property name="defaultSortColumn" ><value>name</value></property>
<property name="adapterType"><value>2</value></property>
<property name="sql">
<value>
select id from test
</value>
</property>
</bean>
</entry>
</map>
</property>
</bean>
</beans>
4.在action类里封装如下方法(valueListHelper需要注入):
/**
* @function:默认查询,查询结果放到request的list变量中
* @param adapter根据adapter变量内容在xml中寻找对应标签如上例中testAdapter
* @param queries参数内容如需要传入查询条件放入map中
* @param tableId根据tableId变量内容在jsp页面中寻找对应root标签的id
* @param request查询结果存入request中
*/
public void setValueListToRequest(String adapter, Map queries, String tableId, HttpServletRequest request)
{
Map map = ValueListRequestUtil.getRequestParameterMap(request, tableId);
map.putAll(queries);
ValueListInfo info = new ValueListInfo(map);
if (map.get("limit")!=null) {
info.setPagingNumberPer(Integer.parseInt(map.get("limit").toString()));//每页记录数
} else {
info.setPagingNumberPer(Integer.MAX_VALUE - 1); // 不分页时取integer最大值(原来是默认80会有数据不全问题)
}
if (map.get("start")!=null) {
info.setPagingPage(Integer.parseInt(map.get("start").toString()) / info.getPagingNumberPer() + 1);//页数
} else {
info.setPagingPage(1); // 不分页时默认按照从第1页开始
}
ValueList valueList = valueListHelper.getValueList(adapter, info);
valueListHelper.backupInfoFor(request, info, tableId);
valueListHelper.setValueListTo(request, valueList, "list");//list为结果集的键
}
/**
*
* @function:获得表中数据
* @param adapter key值
* @param params 需要传的参数
* @return ValueList对象
* @author: mengqingyu 2011-10-18 下午05:11:34
*/
public ValueList getValueList(String adapter, Map params)
{
ValueListInfo info = new ValueListInfo(params);
if (params.get("limit")!=null) {
info.setPagingNumberPer(Integer.parseInt(params.get("limit").toString()));//每页记录数
} else {
info.setPagingNumberPer(Integer.MAX_VALUE - 1); // 不分页时取integer最大值(原来是默认80会有数据不全问题)
}
if (params.get("start")!=null) {
info.setPagingPage(Integer.parseInt(params.get("start").toString()) / info.getPagingNumberPer() + 1);//页数
} else {
info.setPagingPage(1); // 不分页时默认按照从第1页开始
}
ValueList valueList = valueListHelper.getValueList(adapter, info);
return valueList;
}
/**
*
* @function:将valueList对象转换成ArrayList对象
* @param adapter
* @param params
* @return
* @author: mengqingyu 2011-10-18 下午05:12:31
*/
public List<Map> getValuelistToListMap(String adapter, Map params)
{
ValueList valueList = this.getValueList(adapter, params);
List<BasicDynaBean> listBean = valueList.getList();
List<Map> listMap = new ArrayList<Map>();
for(BasicDynaBean dynaBean : listBean){
Map<String,String> map = new HashMap<String,String>();
DynaProperty[] dynaProperties = dynaBean.getDynaClass().getDynaProperties();
for (int i = 0; i < dynaProperties.length; i++) {
String key = dynaProperties[i].getName();
Object o = dynaBean.get(key);
if(o!=null){
map.put(key, o.toString());
}
}
listMap.add(map);
}
return listMap;
}
5.jsp页面代码:
需要引入标签
<%@ taglib uri="/WEB-INF/tld/valuelist.tld" prefix="vlh"%>
<%@ taglib uri="/WEB-INF/tld/c.tld" prefix="c" %>
valueList查询代码list为结果集的键,如果不想用vlh标签,需要在后台对list结果集重新封装来实现。
<vlh:root id="tableId" value="list" url="?" includeParameters="*" >
<vlh:header >
<vlh:column title="" attributes="width='3%'"/>
<vlh:column title="序号" attributes="width='5%'"/>
<vlh:column title="业务名称" property="serviceName" sortable="desc" attributes="width='30%'"/>
<vlh:column title="创建人" property="creator" attributes="width='10%'"/>
<vlh:column title="创建时间" property="startTime" sortable="desc" attributes="width='18%'"/>
<vlh:column title="结束时间" property="endTime" sortable="desc" attributes="width='18%'"/>
<vlh:column title="状态" attributes="width='7%'"/>
<vlh:column title="操作" attributes="width='11%'"/>
</vlh:header>
<c:if test="${list.valueListInfo.totalNumberOfEntries>0}">
<vlh:paging pages="4" showSummary="true"><c:out value="${pagetableId}" /></vlh:paging>
</c:if>
</vlh:root>
提交表单需要隐藏当前分页属性
<input type="hidden" name="tableId.pagingNumberPer" value="${tableId.pagingNumberPer}">
<input type="hidden" name="tableId.sortColumntable" value="${tableId.sortingColumn}">
<input type="hidden" name="tableId.sortDirectiontable" value="${tableId.sortingDirection}">
<input type="hidden" name="tableId.pagingPagetable" value="${tableId.pagingPage}">
6.加入valueList分页按钮图片
microsoftLook.properties拷贝到源码目录下(该文件也是从ValueList.war中解压出来的)。
在xml中加入如下配置:
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:microsoftLook.properties</value>
</list>
</property>
</bean>
<bean id="csvDisplayProvider" class="net.mlw.vlh.web.tag.support.CsvDisplayProvider"/>
<bean id="excelDisplayProvider" class="net.mlw.vlh.web.tag.support.ExcelDisplayProvider"/>
<bean id="microsoftLook" class="net.mlw.vlh.web.ValueListConfigBean">
<property name="displayHelper"><bean class="net.mlw.vlh.web.util.ImagesHomeDisplayHelper" /></property>
<property name="messageSource">
<bean class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename"><value>microsoftLook</value></property>
</bean>
</property>
<property name="linkEncoder">
<bean class="net.mlw.vlh.web.tag.support.DefaultLinkEncoder" >
<property name="encoding">
<value>UTF-8</value>
</property>
</bean>
</property>
<property name="stylePrefix"><value>microsoftLook</value></property>
<property name="displayProviders">
<map>
<entry key="html">
<bean class="net.mlw.vlh.web.tag.support.HtmlDisplayProvider">
<property name="imageHome"><value>images/valueList</value></property>
<property name="usePadding"><value>false</value></property>
<property name="useNoWrap"><value>false</value></property>
<property name="preAppendContextPath"><value>true</value></property>
</bean>
</entry>
<entry key="csv"><ref bean="csvDisplayProvider" /></entry>
<entry key="excel"><ref bean="excelDisplayProvider" /></entry>
</map>
</property>
</bean>
7.修改valueList配置文件内容无需重启服务的方法:
需要自定义两个类文件取代valueList.jar中的类文件。
DefaultValueListHandlerImpl.java和Configuration.java
DefaultValueListHandlerImpl中改写引用Configuration是自定义类而不是jar中的类。
Configuration中加入:
/**
*
* @function: DEBUG模式
* @return
*/
public Map getAdapters()
{
return this.adapters;
}
原类中无此方法。
接下来在访问的超类中加入如下内容:
protected static Boolean isDebug = false; //valueList调试模式
/**
* @function:读取valueList配置文件
*/
private void reloadValueListContext() {
if(isDebug){
try {
DefaultValueListHandlerImpl handler = (DefaultValueListHandlerImpl) valueListHelper.getValueListHandler();
String path = new File(this.getClass().getResource("/").getPath()).getParent();
FileSystemXmlApplicationContext fileSystemXmlApplicationContext = new FileSystemXmlApplicationContext(new String[]{
path + "/springContext/applicationContext-page*.xml",
path + "/springContext/applicationContext-datasource*.xml"});
DefaultValueListHandlerImpl handlerDebug = (DefaultValueListHandlerImpl)fileSystemXmlApplicationContext.getBean("valueListHelper");
Map resultAdapters = handler.getConfig().getAdapters();
resultAdapters.putAll(handlerDebug.getConfig().getAdapters());
handler.getConfig().setAdapters(resultAdapters);
} catch (Exception e) {
e.printStackTrace();
}
}
}
在自定义的setValueListToRequest方法中加入reloadValueListContext方法。
idDebug变量内容可以通过前台页面传入来赋值。
分享到:
相关推荐
标题“仿valuelist式动态sql拼装”指的是在编程中实现类似MyBatis的`<foreach>`标签功能,用于动态地拼接SQL语句,尤其是处理列表参数时的插入、更新或查询操作。这种技术常见于Java后端开发,尤其是在使用ORM(对象...
Java 分页插件Valuelist是一款用于Java Web开发中的实用工具,主要目的是为了在处理大量数据时提高性能和用户体验,通过高效地分页显示数据,避免一次性加载所有数据导致内存压力过大。Valuelist源码的分析对于理解...
ValueList可以与Spring框架集成,以便于访问不同的数据源。Spring提供了一个统一的接口来访问不同的数据源,使得开发者可以快速构建数据驱动的应用程序。 六、使用Service ValueListHandler是一个服务,可以帮助...
"valuelist"是一个专为高性能表格展示设计的组件,主要应用于J2EE环境中,它提供了丰富的功能,如分页、分组以及排序等,旨在优化数据处理和用户体验。在这个项目中,我们可以看到一系列的JSP文件,这些文件是Web...
在Delphi编程环境中,`ValueList`是一种非常实用的组件,尤其对于初学者来说,它提供了方便的方式来管理和处理数据集合。`ValueList`组件通常用于存储键值对,类似于其他编程语言中的字典或哈希表。在这个压缩包中,...
**ValueList 概述** ValueList 是一个框架组件,旨在简化使用 JDBC 进行数据访问时的繁琐工作。它提供了一种方式来替代...在实际项目中,可以根据具体需求调整和扩展 ValueList 功能,以提高代码的可维护性和复用性。
本实例使用SSH框架整合开发,sqlserver2000数据库,valueList 插件,目的是练习分页插件的使用。由于jar包文件太多,故把jar包删去了,使用者只要加上SSH的jar文件,导入eclipse就可以运行
- **配置组件**:在项目配置文件中添加Valuelist的相关配置,包括数据库连接信息和分页参数。 - **编写代码**:在业务逻辑中调用Valuelist的API进行分页查询,返回分页后的数据。 - **视图渲染**:将分页信息传递...
valuelist;valuelist;valuelist;valuelist; 不错的表格控制技术
总的来说,ValueList技术提供了一种抽象层,将数据访问逻辑与业务逻辑分离,使得代码更易于维护和扩展。通过ValueListHandler和ValueListAdapter,开发者可以专注于业务逻辑,而无需关心底层数据查询的细节。这种...
功能强大的JSP分页组件 valuelist0.1.8 封装的很好
通过编程方式分离valuelist,可以动态生成SQL,同时使用参数化查询,有效防止SQL注入。 3. **如何实现SQL拼装**: - **字符串连接**:最基础的方法是通过字符串连接函数,如Python中的`join()`或Java中的`...
在查询大量数据时,valuelist可以限制每次请求返回的数据量,避免一次性加载过多数据导致性能下降。 总的来说,这个项目结合了多个强大的开源组件,构建了一个完整的权限管理体系。Struts2处理请求和展示,...
在使用Java Hibernate框架进行数据操作时,我们常常会遇到ValueList和HQL(Hibernate Query Language)结合使用的情况。HQL是一种面向对象的查询语言,它允许开发者以对象和属性的方式编写查询,而不是直接操作...
这通常可以通过在IDE(如Eclipse或IntelliJ IDEA)中设置构建路径或者在构建脚本(如Maven的pom.xml或Gradle的build.gradle)中配置依赖来完成。 通过这种方式,Java开发者可以在不离开自己的开发环境的情况下,...
在分批加载的场景中,如果`listresult`的长度大于或等于原数组`valuelist`的长度,说明已经加载完所有数据,这时可以执行`page.init()`方法来初始化页面,这可能意味着加载更多数据的循环结束。若未结束,则继续加载...
- 在`web.xml`中配置`<taglib>`元素,指向TLD文件的位置。 - 配置用于导出文件的`<filter>`和`<filter-mapping>`。 #### 六、示例代码 在完成所有配置后,可以通过创建一个新的`index.jsp`页面来进行测试。下面...
在Java编程领域,多线程和设计模式是两个至关重要的概念,它们对于构建高效、可扩展和健壮的软件系统至关重要。在这个“java多线程_设计模式_各种技术”主题中,我们可以深入探讨这两个核心话题,以及如何利用工具来...