`
boogie
  • 浏览: 234716 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

在基于Spring架构的通用查询系统中用DWR实现查询条件的动态显示

阅读更多
一、首先有必要对通用查询系统做个简单介绍:该系统基于Spring+Hibernate+Struts架构,主要包括查询设计器(查询脚本维护、查询分类排序、查询条件维护、查询类型维护)和信息查询两大功能,其主要目的是为应用于软件项目开发当中,解决其全部查询模块和功能模块的条件部分,以加快项目开发速度。
二、说说系统开发中的难点:第一、在应用于项目当中去时怎样保持自己的独立性,也就是解耦的问题,第二、怎样根据各个项目的特点动态地扩展其跟业务逻辑相关的查询条件,这里就涉及到一个查询条件的动态显示问题。
三、接下去就讲正题,用DWR实现查询条件的动态显示
   1、构建查询条件服务:业务逻辑相关的查询条件就通过实现ICxtjValues接口的插件通过Spring配置文件注入给查询条件服务CxtjService,这样就解决了在解耦的情况下实现查询条件扩展。
CxtjService.java代码:
package gov.nbgs.sql.service.impl;
import gov.nbgs.common.bean.Entity;
import gov.nbgs.common.dao.IEntityDao;
import gov.nbgs.common.service.impl.EntityService;
import gov.nbgs.sql.plugin.ICxtjValues;
import java.util.Collection;
import java.util.Map;
import org.apache.log4j.Logger;

public class CxtjService extends EntityService {
	/**
	 * Logger for this class
	 */
	private static final Logger logger = Logger.getLogger(CxtjService.class);
	private Map cxtjValuesMap;
	protected IEntityDao getDao(Entity arg0) {
		return null;
	}
	public Map getCxtjValuesMap() {
		return cxtjValuesMap;
	}
	public void setCxtjValuesMap(Map cxtjValuesMap) {
		this.cxtjValuesMap = cxtjValuesMap;
	}
	public Collection getCollectionCxtjValues(String key) {
		if (logger.isDebugEnabled()) {
			logger.debug("getCollectionCxtjValues(String)=>"+key);
		}
		ICxtjValues cxtjValues = (ICxtjValues)this.getCxtjValuesMap().get(key);
		if(cxtjValues==null) return null;
		if (logger.isDebugEnabled()) {
			logger.debug("getCollectionCxtjValues(String)=>"+cxtjValues.getCollectionCxtjValues().size());
		}
		return cxtjValues.getCollectionCxtjValues();
	}
	public Map getMapCxtjValues(String key) {
		if (logger.isDebugEnabled()) {
			logger.debug("getCxtjValuesMap(String)=>"+key);
		}
		ICxtjValues cxtjValues = (ICxtjValues)this.getCxtjValuesMap().get(key);
		if(cxtjValues==null) return null;
		if (logger.isDebugEnabled()) {
			logger.debug("getCxtjValuesMap(String)=>"+cxtjValues.getMapCxtjValues().size());
		}
		return cxtjValues.getMapCxtjValues();
	}	
}


Spring相关配置:
<beans default-autowire="byName">
  <bean id="swjgCxtjValues" class="gov.nbgs.demo.plugin.SwjgCxtjValues"/>  
  <bean id="cxtjService" class="gov.nbgs.sql.service.impl.CxtjService">
    <property name="cxtjValuesMap">
      <map>
        <entry key="dddd">
          <ref bean="swjgCxtjValues"/>
        </entry>  
        <entry key="djzclxdm">
          <ref bean="swjgCxtjValues"/>
        </entry>             
      </map>
    </property>        
  </bean>
</beans>


DWR配置文件:
<!DOCTYPE dwr PUBLIC
    "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
    "http://www.getahead.ltd.uk/dwr/dwr10.dtd">
<dwr>
	<allow>	
		<convert converter="bean"
			match="org.apache.struts.util.LabelValueBean" />
		<create creator="spring" javascript="CxtjService">
			<param name="beanName">cxtjService</param>
			<include method="getCollectionCxtjValues" />
			<include method="getMapCxtjValues" />
		</create>
	</allow>
</dwr>


查询条件显示CxLayout.jsp部分代码:
<%@ page contentType="text/html; charset=gb2312"%>
<%@ taglib uri="struts-bean" prefix="bean"%>
<%@ taglib uri="struts-html" prefix="html"%>
<%@ taglib uri="struts-logic" prefix="logic"%>
<%@ taglib uri="struts-tiles" prefix="tiles"%>

<jsp:useBean id="cxtjForm" scope="session"
	class="gov.nbgs.sql.web.form.CxtjForm" />

<html:html>
<head>
<title><tiles:getAsString name="title" /></title>

<script src='dwr/interface/CxtjService.js'></script>
<script src='dwr/engine.js'></script>
<script src='dwr/util.js'></script>
<script>
  var cxtjAreaId = "cxtjArea";
  var cxtjTagName = "span";
  
  function onload() {   
    var cxtjList = getPluginCxtjList();
    for(var i = 0; i < cxtjList.length; i++){
      var cxtj = cxtjList[i];
      var cxtjId = cxtj.cxtjId;        
      CxtjService.getMapCxtjValues(cxtjId, {
  	  		callback:function(dataFromServer) {
    			populateCxtjValues(dataFromServer, cxtj);
  			},
  			async:false
	  });      
    }
  }  
  
  function getPluginCxtjList() { 
    var result = new Array();
  
    var cxtjArea = document.getElementById(cxtjAreaId);
   
    var cxtjTagList = document.getElementsByTagName(cxtjTagName);
    //alert("cxtjTagList.length=>" + cxtjTagList.length);
    
    for(var i = 0; i < cxtjTagList.length; i++){
      var cxtjTag = cxtjTagList[i];
      //alert("cxtjTag.className=>" + cxtjTag.className);
      if(cxtjTag.className=="PluginCxtj"){
        var cxtjId = cxtjTag.childNodes[0].nodeValue;
        var cxtjTagId = cxtjTag.id;
        var cxtjType = cxtjTag.getAttribute("type");
        //alert("cxtjType=>" + cxtjType);
        
        var cxtj = {cxtjId: cxtjId, cxtjTagId: cxtjTagId, cxtjType: cxtjType};
        result[result.length] = cxtj;       		
      }
    }
    return result;
  }

  function createCxtjObject(cxtjId,cxtjTagId,cxtjType){
    var select = document.createElement("select");
    select.setAttribute("id",cxtjId);

    var tagCxtj = document.getElementById(cxtjTagId);
    tagCxtj.removeChild(tagCxtj.childNodes[0]);
    tagCxtj.appendChild(select);
  }    

  function createCxtjInputBox(dataFromServer,cxtjId,cxtjTagId,cxtjType){
    var tagCxtj = document.getElementById(cxtjTagId);
    tagCxtj.removeChild(tagCxtj.childNodes[0]);
    var i = 0;
    for (var key in dataFromServer) {
      var val = dataFromServer[key];
      //alert(key + "=" + val);
      var input_id = cxtjId + "_" + i;
      //alert(input_id);
      if(cxtjType=='radio'){
        var input = createElement("input", cxtjId);   
      }else{
        var input = createElement("input", input_id); 
      } 
      input.setAttribute("type",cxtjType); 
      input.setAttribute("value",key); 
      input.setAttribute("id",input_id);
      tagCxtj.appendChild(input);
      
      var label = document.createElement("label");
      label.setAttribute("for",input_id);
      label.appendChild(document.createTextNode(val));    
      tagCxtj.appendChild(label);  
      
      i++;
    }         
  }    
       
  function populateCxtjValues(dataFromServer, cxtj){  
    var cxtjId = cxtj.cxtjId;
    var cxtjTagId = cxtj.cxtjTagId;
    var cxtjType = cxtj.cxtjType;  
    if(cxtjType=='select'){
      createCxtjObject(cxtjId,cxtjTagId,cxtjType);
      DWRUtil.removeAllOptions(cxtjId);
      DWRUtil.addOptions(cxtjId, dataFromServer);      
    }else{
      createCxtjInputBox(dataFromServer,cxtjId,cxtjTagId,cxtjType);
    }
  }
  
  function createElement(type, name) {
    var element = null;

    try {
      // First try the IE way; if this fails then use the standard way
      element = document.createElement('<'+type+' name="'+name+'">');
    } catch (e) {
      // Probably failed because we’re not running on IE
    }
    if (!element) {
      element = document.createElement(type);
      element.name = name;
    }
    return element;
  }      
</script>
</head>
<body onload="onload()">
................
................
  <div id="cxtjArea">	
    <logic:present name="cxtjForm" property="cxtjMap">
    <bean:define id="cxtjMap" name="cxtjForm" property="cxtjMap" type="java.util.Map" />
    <logic:iterate id="cxtj" name="cxtjMap">
      <tr class=jnfont1>
 	 <td><bean:write name="cxtj" property="key"/></td>
 	 <td>
 	      <bean:define id="cxtjvalue" name="cxtj" property="value"/>
 	       <% out.println(cxtjvalue); %>
 	 </td>
       </tr>
     </logic:iterate> 
    </logic:present>	
  </div>
..................
.................
</body>
</html:html>


四、初次写技术博客文章,不当之处望各位网友提醒指正!
分享到:
评论
5 楼 javachs 2008-05-07  
你好,你能给我这个通用查询的详细代码吗?我的邮件chsboy@hotmail.com,我要被boss弄疯了
4 楼 iorit2003 2008-03-14  
你好,你能给我这个通用查询的详细代码吗?我的邮件iorit2003@yahoo.com.cn
3 楼 chris_in 2007-08-07  
大美女!!!
2 楼 yeshucheng 2007-07-10  
可以再结合extremecomponents的AutoGenerateColumns来得到动态列集合
1 楼 boogie 2007-04-28  
YES

相关推荐

    使用dwr+spring实现消息推送

    在本教程中,我们将探讨如何利用Direct Web Remoting (DWR) 和Spring框架来实现这样的功能。 DWR是一个开源Java库,它允许Web应用程序在浏览器和服务器之间进行实时的、异步的通信,类似于Ajax的功能,但更加强大。...

    文具申请系统 Extjs dwr spring 实现

    【文具申请系统 Extjs Dwr Spring 实现】 在IT领域,开发企业级应用程序时,通常需要使用到各种技术和框架来提高效率、增强用户体验并确保系统的可维护性。本项目"文具申请系统"就是一个这样的实例,它巧妙地融合了...

    DWR,Struts,Hibernate和Spring的J2EE架构开发大全

    DWR在基于Spring框架的Web应用中的研究.pdf J2EE平台上消息驱动Bean对客户的响应与回传的实现.pdf J2EE轻量级框架的研究与应用.pdf Spring_IoC集成原理的应用设计.pdf Sturts2与以其它Web应用框架整合的研究.pdf ...

    dwr+spring实例

    综上所述,"DWRSpring实例"是一个很好的学习资源,可以帮助我们理解DWR如何与Spring框架集成,以及如何在实际项目中实现动态的、基于Ajax的Web应用。通过研究和实践这个例子,开发者可以提升自己在构建富互联网应用...

    spring+dwr.rar_dwr_dwr SPRING_spring dwr

    在"spring+dwr.rar_dwr_dwr SPRING_spring dwr"这个项目中,我们将看到如何整合这两个工具,以实现一个简单的功能:验证用户名是否存在。这个功能通常用于注册或登录页面,防止用户选择已被占用的用户名。 步骤如下...

    DWR+Struts+spring+hibernate的订货系统

    DWR+Struts+spring+hibernate的订货系统,自己添加的dwr功能

    maven3+spring3+mybatis3+dwr3实现的的异步刷新产品信息系统

    Maven3+spring3+mybatis3+dwr3+mysql5.5,请用Chrome浏览器,兼容性还未调试。 自己写的一个小系统,包含一个模块:产品模块。 基本这个模块包括的内容就比较多了,CRUD,无刷新查询,图片上传等, 其实也是整个...

    spring2 整合 Dwr(把DWR的配置写到Spring的配置文件)

    **Spring2 整合 DWR:将DWR配置融入Spring配置文件** Direct Web Remoting (DWR) 是一个开源的JavaScript库,它允许在浏览器和服务器之间进行实时、安全的双向通信,使得Web应用程序能够拥有类似桌面应用的交互性。...

    spring3+dwr3实现聊天功能

    Spring框架和Direct Web Remoting (DWR) 是两个强大的工具,可以协同工作来实现这一目标。本篇将详细介绍如何利用Spring3和DWR3创建聊天功能,以及DWR的Server Push技术在其中的作用。 首先,Spring3是一个全面的...

    spring mvc+ibatis+dwr实现dispatchservlet

    Spring MVC、iBATIS(现在称为MyBatis)和Direct Web Remoting (DWR) 是三个常用的Java框架,它们各自在不同的层面上发挥着作用,共同为开发高质量的Web应用提供支持。本文将深入探讨如何使用这些技术实现...

    Spring与DWR结合

    3. **DWR与Spring集成**:为了使DWR能访问到Spring管理的Bean,我们需要在DWR的`web.xml`配置文件中添加Spring的`ContextLoaderListener`,以及DWR的`ContextProvider`,以便在DWR初始化时加载Spring上下文。...

    dwr与spring整合

    DWR是一款开源的Java库,它允许在浏览器和服务器之间进行动态、实时的双向通信,实现了JavaScript与Java之间的远程调用。Spring则是一个广泛使用的Java企业级应用开发框架,提供了依赖注入、AOP(面向切面编程)以及...

    DWR与SPRING 集成

    标题 "DWR与SPRING 集成" 涉及到的是两个在Web开发中常用的开源框架——Direct Web Remoting (DWR) 和 Spring。DWR允许在浏览器和服务器之间进行实时、异步的数据交换,而Spring是Java企业级应用的全面解决方案,...

    DWR与SPRING,DWR与STRUTS2的整合

    1. **配置DWR Spring集成**:在Spring配置文件中定义DWR相关的bean,如`DWRConfig`和`SpringContextUtil`,以便让DWR能够访问Spring的bean。 2. **Spring托管的Java类暴露给JavaScript**:通过Spring的`@Service`或...

    dwr与spring集成的方式

    通过上述两种方式,可以实现DWR与Spring的有效集成,从而发挥两者的优点,提高系统的可维护性和扩展性。选择合适的方式取决于项目的具体需求和技术团队的习惯。对于已经熟悉Spring框架的开发者来说,第一种方式可能...

    Spring DWR配置实例

    Spring Direct Web Remoting (DWR) 是一个Java库,它允许Web应用程序轻松地在客户端JavaScript和服务器端Java之间进行交互。这个技术的核心功能是提供了一种机制,使得动态的、实时的Web应用成为可能,无需刷新整个...

    将dwr集成到spring mvc(dwr的配置是基于xml)

    在Java Web开发中,Direct Web Remoting (DWR) 是一个强大的工具,它允许JavaScript与服务器端的Java对象进行交互,实现动态的Ajax应用。DWR 提供了一种简单的方法来调用Java方法并更新页面内容,而无需刷新整个页面...

    OA系统源码,采用Struts2.0+Hibernate+Spring架构外加DWR

    该源码成功整合了Struts2.0+Hibernate+Spring(SSH架构)+DWR+MySql+Tomcat,直接拷贝部署就可以运行,前提建立相应的数据库。模块包括(组织机构管理,人员管理,角色管理,权限管理等等),每个模块均有增删查改等...

    DWR示例与spring集成

    **DWR(Direct Web Remoting)**是一种Java技术,它允许Web应用程序在浏览器和服务器之间进行实时通信,类似于Ajax(Asynchronous JavaScript and XML),但提供了更简单和直接的方法。DWR使得JavaScript可以直接...

    dwr2.0 spring 3.0 整合示例

    在这个"DWR 2.0 Spring 3.0 整合示例"中,我们将探讨如何将DWR与Spring框架集成,以实现高效的前后端交互。整合DWR和Spring的主要目标是利用Spring的管理能力来处理DWR的bean,同时利用DWR的动态JavaScript生成能力...

Global site tag (gtag.js) - Google Analytics