一、首先有必要对通用查询系统做个简单介绍:该系统基于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>
四、初次写技术博客文章,不当之处望各位网友提醒指正!
分享到:
相关推荐
在本教程中,我们将探讨如何利用Direct Web Remoting (DWR) 和Spring框架来实现这样的功能。 DWR是一个开源Java库,它允许Web应用程序在浏览器和服务器之间进行实时的、异步的通信,类似于Ajax的功能,但更加强大。...
【文具申请系统 Extjs Dwr Spring 实现】 在IT领域,开发企业级应用程序时,通常需要使用到各种技术和框架来提高效率、增强用户体验并确保系统的可维护性。本项目"文具申请系统"就是一个这样的实例,它巧妙地融合了...
DWR在基于Spring框架的Web应用中的研究.pdf J2EE平台上消息驱动Bean对客户的响应与回传的实现.pdf J2EE轻量级框架的研究与应用.pdf Spring_IoC集成原理的应用设计.pdf Sturts2与以其它Web应用框架整合的研究.pdf ...
综上所述,"DWRSpring实例"是一个很好的学习资源,可以帮助我们理解DWR如何与Spring框架集成,以及如何在实际项目中实现动态的、基于Ajax的Web应用。通过研究和实践这个例子,开发者可以提升自己在构建富互联网应用...
在"spring+dwr.rar_dwr_dwr SPRING_spring dwr"这个项目中,我们将看到如何整合这两个工具,以实现一个简单的功能:验证用户名是否存在。这个功能通常用于注册或登录页面,防止用户选择已被占用的用户名。 步骤如下...
DWR+Struts+spring+hibernate的订货系统,自己添加的dwr功能
Maven3+spring3+mybatis3+dwr3+mysql5.5,请用Chrome浏览器,兼容性还未调试。 自己写的一个小系统,包含一个模块:产品模块。 基本这个模块包括的内容就比较多了,CRUD,无刷新查询,图片上传等, 其实也是整个...
**Spring2 整合 DWR:将DWR配置融入Spring配置文件** Direct Web Remoting (DWR) 是一个开源的JavaScript库,它允许在浏览器和服务器之间进行实时、安全的双向通信,使得Web应用程序能够拥有类似桌面应用的交互性。...
Spring框架和Direct Web Remoting (DWR) 是两个强大的工具,可以协同工作来实现这一目标。本篇将详细介绍如何利用Spring3和DWR3创建聊天功能,以及DWR的Server Push技术在其中的作用。 首先,Spring3是一个全面的...
Spring MVC、iBATIS(现在称为MyBatis)和Direct Web Remoting (DWR) 是三个常用的Java框架,它们各自在不同的层面上发挥着作用,共同为开发高质量的Web应用提供支持。本文将深入探讨如何使用这些技术实现...
3. **DWR与Spring集成**:为了使DWR能访问到Spring管理的Bean,我们需要在DWR的`web.xml`配置文件中添加Spring的`ContextLoaderListener`,以及DWR的`ContextProvider`,以便在DWR初始化时加载Spring上下文。...
DWR是一款开源的Java库,它允许在浏览器和服务器之间进行动态、实时的双向通信,实现了JavaScript与Java之间的远程调用。Spring则是一个广泛使用的Java企业级应用开发框架,提供了依赖注入、AOP(面向切面编程)以及...
标题 "DWR与SPRING 集成" 涉及到的是两个在Web开发中常用的开源框架——Direct Web Remoting (DWR) 和 Spring。DWR允许在浏览器和服务器之间进行实时、异步的数据交换,而Spring是Java企业级应用的全面解决方案,...
1. **配置DWR Spring集成**:在Spring配置文件中定义DWR相关的bean,如`DWRConfig`和`SpringContextUtil`,以便让DWR能够访问Spring的bean。 2. **Spring托管的Java类暴露给JavaScript**:通过Spring的`@Service`或...
通过上述两种方式,可以实现DWR与Spring的有效集成,从而发挥两者的优点,提高系统的可维护性和扩展性。选择合适的方式取决于项目的具体需求和技术团队的习惯。对于已经熟悉Spring框架的开发者来说,第一种方式可能...
Spring Direct Web Remoting (DWR) 是一个Java库,它允许Web应用程序轻松地在客户端JavaScript和服务器端Java之间进行交互。这个技术的核心功能是提供了一种机制,使得动态的、实时的Web应用成为可能,无需刷新整个...
在Java Web开发中,Direct Web Remoting (DWR) 是一个强大的工具,它允许JavaScript与服务器端的Java对象进行交互,实现动态的Ajax应用。DWR 提供了一种简单的方法来调用Java方法并更新页面内容,而无需刷新整个页面...
该源码成功整合了Struts2.0+Hibernate+Spring(SSH架构)+DWR+MySql+Tomcat,直接拷贝部署就可以运行,前提建立相应的数据库。模块包括(组织机构管理,人员管理,角色管理,权限管理等等),每个模块均有增删查改等...
**DWR(Direct Web Remoting)**是一种Java技术,它允许Web应用程序在浏览器和服务器之间进行实时通信,类似于Ajax(Asynchronous JavaScript and XML),但提供了更简单和直接的方法。DWR使得JavaScript可以直接...
在这个"DWR 2.0 Spring 3.0 整合示例"中,我们将探讨如何将DWR与Spring框架集成,以实现高效的前后端交互。整合DWR和Spring的主要目标是利用Spring的管理能力来处理DWR的bean,同时利用DWR的动态JavaScript生成能力...