`
fengfan2008
  • 浏览: 96451 次
  • 性别: Icon_minigender_1
  • 来自: 南京市
社区版块
存档分类
最新评论

SSH问题及解决之三 SpringSide3缺陷

阅读更多
http://code.google.com/p/springside/issues/detail?id=28
引用
ss3中的PropertyFilter 好像没提供实现where 属性名1 like '%值1%' or 属性名1
like '%值2%'  or 属性名1 like '%值3%' ...这种情况的
请问遇到这种情况该怎么实现呢,如果自己写就要丢掉page封装了


我的项目也遇到这个问题, 而SpringSide确实没有提供好的解决方案,原因是PropertyFilter中的propertyValue, matchType没有使用数据类型进行声明定义, 而propertyNames是数组, 这就导至了, '或'(_OR_)操作时值和匹配类型必须一致.
我的做法是:
		// 1. '不等于' '或' '非空'的逻辑
		Disjunction disjunction = Restrictions.disjunction();
		// 不等于
		Criterion neCriterion = buildPropertyFilterCriterion("workCenterId",
				workCenterId, java.lang.Integer.class,
				PropertyFilter.MatchType.NE);
		// 或为空
		Criterion nullCriterion = buildPropertyFilterCriterion("workCenterId",
				null, java.lang.Integer.class, PropertyFilter.MatchType.NULL);
		disjunction.add(neCriterion);
		disjunction.add(nullCriterion);
		finalList.add(disjunction);
		// 2. 追加获得到的查询条件
		List<Criterion> criterionList = this.buildCriterions(filters);
		if (criterionList!=null && !criterionList.isEmpty()) {
			finalList.addAll(criterionList);
		}
		Criterion[] criterions = finalList
				.toArray(new Criterion[finalList.size()]);
		return findPage(page, criterions);


如上, 由于项目进度关系没有去扩展ss, 对于这种或的关系自己做了较硬性的编码。

	/**
	 * 获得查询条件
	 * 
	 * @param filters
	 * @return
	 */
	protected List<Criterion> buildCriterions(final List<PropertyFilter> filters) {
		List<Criterion> criterionList = new ArrayList<Criterion>();
		for (PropertyFilter filter : filters) {
			if (!filter.isMultiProperty()) { // There is only one property
				// need to compare the
				// situation.
				Criterion criterion = buildPropertyFilterCriterion(filter
						.getPropertyName(), filter.getPropertyValue(), filter
						.getPropertyType(), filter.getMatchType());
				criterionList.add(criterion);
			} else {// Contain multiple attributes need to compare the situation
				// to carry out or deal with.
				Disjunction disjunction = Restrictions.disjunction();
				for (String param : filter.getPropertyNames()) {
					Criterion criterion = buildPropertyFilterCriterion(param,
							filter.getPropertyValue(),
							filter.getPropertyType(), filter.getMatchType());
					disjunction.add(criterion);
				}
				criterionList.add(disjunction);
			}
		}
		return criterionList;
	}


分享到:
评论

相关推荐

    springside3与传统ssh区别

    ### Springside3与传统SSH(Struts + Spring + Hibernate)的区别 #### 1. 数据库设计 在数据库设计方面,Springside3采用了一种更为现代化的方法,这体现在其对实体对象、DAO对象的设计上。它更加侧重于利用Java ...

    springside3源码及jar

    三、springside3的jar包使用 1. **依赖管理**:springside3的jar包可以作为项目的依赖引入,通过Maven的pom.xml文件配置,可以方便地管理和更新版本。 2. **模块引用**:根据实际需求,可以选择性地引入springside...

    springside3文档资料收录

    《SpringSide3:全方位探索Java开发的利器》 SpringSide3是Java开发领域的一个重要参考资料,它是由知名开发者Calvin创建并维护的项目,旨在为Java开发者提供一套完整的Spring框架学习与实践指南。SpringSide3不仅...

    springside3

    在本次讨论中,我们将深入探讨springside3-core-3.3.4.jar这一核心组件,它是SpringSide 3项目的基石,包含了项目的核心功能和模块。 1. **SpringSide 3概述**: SpringSide 3 是由中国的Java社区开发的一个开源...

    SpringSide3-core-3.3.4

    1. **额外框架集成**:此扩展包可能包含了对其他第三方库的集成,如缓存管理(如Ehcache)、数据验证(如Hibernate Validator)或消息队列(如RabbitMQ),进一步丰富了SpringSide3的功能。 2. **模板引擎集成**:...

    SpringSide3框架

    SpringSide3框架,SpringSide3框架SpringSide3框架SpringSide3框架

    springside3-core-3.2.2包

    springside3-core-3.2.2 

    springside3 完整项目实例

    《SpringSide3 完整项目实例详解》 SpringSide 是一个开源的 Java 开发框架,其版本3(SpringSide3)是基于 Spring Framework 的企业级应用开发平台,它旨在简化 Spring 的使用,提供清晰的实践指导,使得开发者...

    springside3-extension-3.3.4

    springside3-extension-3.3.4.jar

    springside3-core-3.3.4

    springside3-core-3.3.4.jar

    springside3-core-3.3.4.jar

    springside3-core-3.3.4.jar

    springside3.3完整版

    "ssh3.3"这个文件名暗示了SpringSide 3.3可能集成了Struts2、Hibernate和Spring,也就是常说的SSH框架。这三个框架的整合能够实现高效的MVC开发,Struts2处理请求和展示视图,Hibernate负责持久化操作,Spring则...

    springside3.3.4 使用方法

    ### springside3.3.4使用方法与SSH整合详解 #### 一、Springside简介 Springside项目是基于Spring框架的一个应用架构示例,它提供了一套完整的开发模式来构建企业级Java Web应用程序。Springside 3.3.4版本作为一...

    SpringSide3开发环境mini-web项目_3

    SpringSide3开发环境mini-web项目_3 一共三个压缩包: http://download.csdn.net/source/1725011 http://download.csdn.net/source/1725015 http://download.csdn.net/source/1725311

    springside3-core-3.0.4 源码

    《深入剖析springside3-core-3.0.4源码》 springside3-core-3.0.4是一款基于Spring框架的轻量级Java开发工具包,它旨在简化企业级应用的开发过程,提供了一系列实用的工具类、配置模块和示例代码。这个源码包对于...

    springside-3.2.2源码

    《SpringSide 3.2.2 源码解析与技术深度探讨》 SpringSide 是一个基于 Spring Framework 的 Java 开发工具集,旨在简化 Spring 应用程序的开发过程,提供一套快速、现代且规范的开发实践。SpringSide 3.2.2 版本是...

Global site tag (gtag.js) - Google Analytics