`
mengqingyu
  • 浏览: 333891 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

集成valueList配置详解及动态加载XML源码扩展

阅读更多
集成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拼装

    标题“仿valuelist式动态sql拼装”指的是在编程中实现类似MyBatis的`&lt;foreach&gt;`标签功能,用于动态地拼接SQL语句,尤其是处理列表参数时的插入、更新或查询操作。这种技术常见于Java后端开发,尤其是在使用ORM(对象...

    java分页插件valuelist

    Java 分页插件Valuelist是一款用于Java Web开发中的实用工具,主要目的是为了在处理大量数据时提高性能和用户体验,通过高效地分页显示数据,避免一次性加载所有数据导致内存压力过大。Valuelist源码的分析对于理解...

    兔八哥ValueList的文档0.3

    ValueList可以与Spring框架集成,以便于访问不同的数据源。Spring提供了一个统一的接口来访问不同的数据源,使得开发者可以快速构建数据驱动的应用程序。 六、使用Service ValueListHandler是一个服务,可以帮助...

    valuelist

    "valuelist"是一个专为高性能表格展示设计的组件,主要应用于J2EE环境中,它提供了丰富的功能,如分页、分组以及排序等,旨在优化数据处理和用户体验。在这个项目中,我们可以看到一系列的JSP文件,这些文件是Web...

    ValueList_delphiValueList_

    在Delphi编程环境中,`ValueList`是一种非常实用的组件,尤其对于初学者来说,它提供了方便的方式来管理和处理数据集合。`ValueList`组件通常用于存储键值对,类似于其他编程语言中的字典或哈希表。在这个压缩包中,...

    ValueList的文档

    **ValueList 概述** ValueList 是一个框架组件,旨在简化使用 JDBC 进行数据访问时的繁琐工作。它提供了一种方式来替代...在实际项目中,可以根据具体需求调整和扩展 ValueList 功能,以提高代码的可维护性和复用性。

    valueList 分页插件的使用

    本实例使用SSH框架整合开发,sqlserver2000数据库,valueList 插件,目的是练习分页插件的使用。由于jar包文件太多,故把jar包删去了,使用者只要加上SSH的jar文件,导入eclipse就可以运行

    包括应用示例的功能强大的分页组件valuelist0.1.8

    - **配置组件**:在项目配置文件中添加Valuelist的相关配置,包括数据库连接信息和分页参数。 - **编写代码**:在业务逻辑中调用Valuelist的API进行分页查询,返回分页后的数据。 - **视图渲染**:将分页信息传递...

    valuelist war

    valuelist;valuelist;valuelist;valuelist; 不错的表格控制技术

    ValueList技术分享 ValueList技术应用.doc

    总的来说,ValueList技术提供了一种抽象层,将数据访问逻辑与业务逻辑分离,使得代码更易于维护和扩展。通过ValueListHandler和ValueListAdapter,开发者可以专注于业务逻辑,而无需关心底层数据查询的细节。这种...

    功能强大的JSP分页组件 valuelist0.1.8

    功能强大的JSP分页组件 valuelist0.1.8 封装的很好

    分离valuelist的sql拼装

    通过编程方式分离valuelist,可以动态生成SQL,同时使用参数化查询,有效防止SQL注入。 3. **如何实现SQL拼装**: - **字符串连接**:最基础的方法是通过字符串连接函数,如Python中的`join()`或Java中的`...

    权限控制(struts2+hibernate+spring+struts-menu+valuelist)

    在查询大量数据时,valuelist可以限制每次请求返回的数据量,避免一次性加载过多数据导致性能下降。 总的来说,这个项目结合了多个强大的开源组件,构建了一个完整的权限管理体系。Struts2处理请求和展示,...

    如何通过配置自动实现ValueList中hql语句的整型参数转换

    在使用Java Hibernate框架进行数据操作时,我们常常会遇到ValueList和HQL(Hibernate Query Language)结合使用的情况。HQL是一种面向对象的查询语言,它允许开发者以对象和属性的方式编写查询,而不是直接操作...

    Java调用SPSS的实例.docx

    这通常可以通过在IDE(如Eclipse或IntelliJ IDEA)中设置构建路径或者在构建脚本(如Maven的pom.xml或Gradle的build.gradle)中配置依赖来完成。 通过这种方式,Java开发者可以在不离开自己的开发环境的情况下,...

    微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(二)

    在分批加载的场景中,如果`listresult`的长度大于或等于原数组`valuelist`的长度,说明已经加载完所有数据,这时可以执行`page.init()`方法来初始化页面,这可能意味着加载更多数据的循环结束。若未结束,则继续加载...

    extremeTable

    - 在`web.xml`中配置`&lt;taglib&gt;`元素,指向TLD文件的位置。 - 配置用于导出文件的`&lt;filter&gt;`和`&lt;filter-mapping&gt;`。 #### 六、示例代码 在完成所有配置后,可以通过创建一个新的`index.jsp`页面来进行测试。下面...

    java多线程_设计模式_各种技术(我的书架)

    在Java编程领域,多线程和设计模式是两个至关重要的概念,它们对于构建高效、可扩展和健壮的软件系统至关重要。在这个“java多线程_设计模式_各种技术”主题中,我们可以深入探讨这两个核心话题,以及如何利用工具来...

Global site tag (gtag.js) - Google Analytics