`

一个完整(详细注释分析)的整合hibernate与struts连接数据库的三级联动

阅读更多

1.主要实现功能效果图如下:




 

2.项目案例分析

由于地方有限,这里只列出核心代码,js的编写源码和struts的源码;更多源码,以及数据库见本人资源,0分上传,免费供大家参考学习:tianyazaiheruan

尊重别人的劳动成果与知识产权,转载请指明出处:杨凯专属频道

该项目为一个整合hibernatestruts,利用json对象存放临时数据库数据,连接数据的三级联动;改项目使用ajax传递请求连接和参数;数据库结果为三表级联,三表之间依次都是多对一的关系;其中代码核心代码都附有详细的注释,供大家研讨学习;

其中包括:Select.js:主要实现功能的jsUtil.js:工具js,封装一些ajax的请求方法以及创建ajax的方法还有模拟jQuery的根据id获取dom对象;Struts.xml:主要亮点在配置一个多变级联时防止加载多个表的操作,从而达到解决多表级联操作的时候经常出现的session已关闭的bug

Select.js:主要实现功能的js
window.onload = function() {

	// 创建省份的节点对象
	var provinceDom = $("province");
	// 创建市的节点对象
	var cityDom = $("city");
	// 创建城镇的节点对象
	var countryDom = $("country");

	// 实现省的操作
	// 发送ajax请求
	var url = "./csdn/ProvinceAction_select.action?time="
			+ new Date().getTime();
	sendGet(content, url, getProvinceSuccess, getProvinceFail);

	function getProvinceSuccess(xhr) {
		// 获取省份的json对象
		var provinceObj = eval("(" + xhr.responseText + ")");
		// 获取存放在json对象中的省份数组
		var jsonprovinces = provinceObj.provinces;
		// 遍历省份数组
		for ( var i = 0; i < jsonprovinces.length; i++) {
			// 得到具体的省
			var jsonProvince = jsonprovinces[i];
			// 创建显示省的option
			var provinceOption = document.createElement("option");
			// 设置option标签中具体省的value值
			provinceOption.setAttribute("value", jsonProvince.pid);
			// 设置option标签中具体省的文本,并追加option中
			provinceOption.appendChild(document
					.createTextNode(jsonProvince.pname));
			// 将省的option追加到省的select
			provinceDom.appendChild(provinceOption);
		}
	}
	function getProvinceFail() {
		alert("获取省份失败!");
	}

	// 实现市的操作
	provinceDom.onchange = function() {
		// 获取发生改变事件的省的id
		var pid = this.value;
		// 判断是否需要查询的操作
		if (pid != -1) {
			// 发送ajax请求
			var url = "./csdn/CityAction_select.action?time="
					+ new Date().getTime();
			var content = "pid=" + pid;
			sendPost(content, url, getCitySuccess, getCityFail);

		}
	};

	function getCitySuccess(xhr) {

		// 清空数据;清空市
		cityDom.length = 1;
		
		
		// 得到城市的json对象
		var cityObj = eval("(" + xhr.responseText + ")");
		// 由城市的json对象获取城市的数组
		var jsonCities = cityObj.cities;
		for ( var i = 0; i < jsonCities.length; i++) {
			// 得到一个具体的市对象
			var jsonCity = jsonCities[i];
			var cityOption = document.createElement("option");
			// 设置省的value值
			cityOption.setAttribute("value", jsonCity.cid);
			// 设置省的文本,并追加option中
			cityOption.appendChild(document.createTextNode(jsonCity.cname));
			cityDom.appendChild(cityOption);
		}
	}
	function getCityFail(xhr) {

	}

	// 实现城镇的操作
	cityDom.onchange = function() {

		var cid = this.value;
		// 判断是否需要查询的操作
		if (cid != -1) {
			// 发送ajax请求
			var url = "./csdn/CountryAction_select.action?time="
					+ new Date().getTime();
			var content = "cid=" + cid;
			sendPost(content, url, getcountrySuccess, getcountryFail);
		}
	};

	function getcountrySuccess(xhr) {

		// 清空数据:城镇
		countryDom.length = 1;
		
		var countryObj = eval("(" + xhr.responseText + ")");
		var jsonCountries = countryObj.countries;
		for ( var i = 0; i < jsonCountries.length; i++) {
			var jsonCountry = jsonCountries[i];
			var countryOption = document.createElement("option");
			countryOption.setAttribute("value", jsonCountry.tid);
			countryOption.appendChild(document
					.createTextNode(jsonCountry.tname));
			countryDom.appendChild(countryOption);
		}
	}
	function getcountryFail(xhr) {
		alert("获取城镇失败!");
	}
};

Util.js:工具js,封装一些ajax的请求方法以及创建ajax的方法还有模拟jQuery的根据id获取dom对象
//通过id获取dom对象
function $(id) {
	return document.getElementById(id);
}

// ajax技术必须创建XMLHTTPRequest对象 ,获取XMLHTTPRequest对象的操作
function createXHR() {
	var xhr;
	var aVersion = [ "MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0",
			"MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp", "Microsoft.XMLHttp" ];
	try {
		// 高版本ie、firefox、opera等浏览器直接new出ajax对象
		xhr = new XMLHttpRequest();
	} catch (e) {
		// 低版本的IE,ie6以下版本需要通过以下操作创建ajax对象
		for ( var i = 0; i < aVersion.length; i++) {
			try {
				xhr = new ActiveXObject(aVersion[i]);
				return xhr;
			} catch (e) {
				continue;
			}
		}
	}
	return xhr;
}

//post方式发送请求的方法
function sendPost(content, url, success, fail) {
	var xhr = createXHR();
	// 触发器
	xhr.onreadystatechange = function() {
		if (xhr.readyState == 4) {
			if (xhr.status == 200 || xhr.status == 304) {
				success(xhr);
			} else {
				fail(xhr);
			}
		}
	};
	// 打开请求
	xhr.open("POST", url, true);
	// 设置类型
	xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	// 发送请求
	xhr.send(content);
}

//get方式发送请求的方法
function sendGet(content, url, success, fail) {
	var xhr = createXHR();
	// 触发器
	xhr.onreadystatechange = function() {
		if (xhr.readyState == 4) {
			if (xhr.status == 200 || xhr.status == 304) {
				success(xhr);
			} else {
				fail(xhr);
			}
		}
	};
	// 打开请求
   xhr.open("GET", url+"?"+content, true);	
	// 发送请求	
	xhr.send(null);
}

Struts.xml:主要亮点在配置一个多变级联时防止加载多个表的操作,从而达到解决多表级联操作的时候经常出现的session已关闭的bug
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
	<include file="www/csdn/project/resource/struts-constant.xml" />

	<package name="csdn" namespace="/csdn" extends="json-default">
	
		<action name="ProvinceAction_*" class="www.csdn.project.action.ProvinceAction"
			method="{1}">
			<result type="json">
			<!-- 改配置参数为关键,如果不设置改参数json对象会默认加载城市类导致出现session已关闭的错误 -->
				<param name="includeProperties">provinces\[\d+\]\.pid,provinces\[\d+\]\.pname</param>
			</result>
			<result name="input">/index.jsp</result>
		</action>

		<action name="CityAction_*" class="www.csdn.project.action.CityAction"
			method="{1}">
			<result type="json">
				<param name="includeProperties">cities\[\d+\]\.cid,cities\[\d+\]\.cname</param>
			</result>
			<result name="input">/index.jsp</result>
		</action>

		<action name="CountryAction_*" class="www.csdn.project.action.CountryAction"
			method="{1}">
			<result type="json">
				<param name="includeProperties">countries\[\d+\]\.tid,countries\[\d+\]\.tname</param>
			</result>
			<result name="input">/index.jsp</result>
		</action>
		
	</package>
</struts>

 

分享到:
评论

相关推荐

    城市级联之三级联动

    该项目为一个整合hibernate与struts,利用json对象存放临时数据库数据,连接数据的三级联动;改项目使用ajax传递请求连接和参数;数据库结果为三表级联,三表之间依次都是多对一的关系;其中代码核心代码都附有详细...

    三级联动的数据库脚本

    通过使用上述两个表中的数据,可以构建一个完整的三级联动数据结构。具体实现原理如下: 1. **获取省份列表**:查询`dict_province`表中的所有省份记录。 2. **获取城市列表**:当用户选择某个省份后,根据省份ID...

    hibernate+struts2 项目源码

    【标题】:“Hibernate+Struts2 项目源码”是一个基于流行Java开发框架的实践项目,旨在教授如何结合使用Hibernate对象关系映射框架与Struts2 MVC(模型-视图-控制器)框架来构建Web应用程序。 【描述】:这个项目...

    Hibernate注释方法描述数据库映射

    ### Hibernate注释方法描述数据库映射 #### 一、概述 Hibernate 是一款强大的对象关系映射(ORM)框架,它简化了 Java 开发者与数据库交互的过程。在 Hibernate 中,可以利用注解来描述实体类与数据库表之间的映射...

    详细的spring + hibernate +struts 整合方法

    Spring、Hibernate和Struts是Java开发中非常经典的三大框架,它们分别负责控制层、持久层和视图层的处理,组合使用可以构建出强大的企业级应用。本文将深入探讨SSH框架的整合方法及其常见问题解决方案。 Spring框架...

    SSH项目(spring+hibernate+struts2)

    SSH项目是一种经典的Java Web开发框架组合,由Spring、Hibernate和Struts2三个开源框架组成。这个项目示例提供了一个基于这些技术的简单应用,帮助开发者理解如何将它们整合在一起进行实际开发。 **Spring框架**是...

    jQuery改写上一个城市的三级联动(解决浏览器兼容bug)

    与上一个三级联动不同的是:上一个项目是使用dom技术编写的整个js代码,存在一定的不足与bug,即浏览器不兼容,只在火狐中有成效,IE、opera、google等都不能兼容。。。到底是哪个模块导致的不兼容,本人目前正在...

    轻量级J2EE企业应用实战--Struts+Spring+Hibernate整合开发笔记

    本资源将详细介绍 Struts、Spring 和 Hibernate 的使用方法和实践经验,帮助读者快速掌握三大框架的使用方法和整合开发技术。 结语 本资源为轻量级 J2EE 企业应用实战开发笔记,涵盖 Struts、Spring 和 Hibernate ...

    hibernate@注解方式配置实体类,调用javadoc接口生成数据库表及字段的注释说明

    hibernate@注解方式配置实体类时,利用javadoc接口生成数据库表及字段的注释说明,支持oracle、sqlserver、db2、mysql数据库。因用到java\lib\tools.jar,需要将该jar放入工程lib下(或者tomcat\lib下、或加入...

    php与Ajax省市县联动(带完整数据库,详细注释)

    在本案例中,我们将深入探讨如何利用这两者实现省市县的联动效果,这是一个常见的需求,例如在地址选择、用户注册或物流查询等场景。 首先,PHP是一种服务器端的脚本语言,主要用于处理HTML页面上的数据和业务逻辑...

    php实现三级联动操作

    在网页设计中,三级联动指的是三个下拉列表框之间存在关联,当用户在一个下拉框中选择一项时,第二个下拉框会根据所选内容动态更新其选项,同样的,第二个下拉框的选择会影响第三个下拉框的内容。这种功能通常通过...

    struts2+hibernate+ibatis整合

    Struts2、Hibernate和iBatis是Java Web开发中三个非常重要的开源框架,它们分别用于MVC(模型-视图-控制器)架构、对象关系映射(ORM)和SQL映射。将这三个框架整合在一起可以构建高效、灵活的Web应用程序。 **...

    struts2、hibernate、spring三大框架整合项目包

    详细示范了当前java里面流行的三大框架的整合,对于spring的配置文件applicationContext.xml做了详细的注释说明,里面包含数据库连接池、Hibernate里的SessionFactory、事务等重点模块的配置。在实际开发过程中多数...

    struts2+hibernate 登录实例..详细注释..保证能运行

    Struts2和Hibernate是两种非常...开发者可以通过阅读代码和注释,理解如何在实际项目中整合Struts2和Hibernate,实现动态Web应用的用户认证功能。同时,实践这个实例也能帮助加深对MVC模式、ORM和数据库操作的理解。

    struts+spring+hibernate整合办公OA系统全套视频下载地址

    综上所述,这套视频教程不仅涵盖了Struts、Spring和Hibernate这三个框架的基础知识,还深入到了实际项目的开发过程中,对于想要深入了解这三个框架并应用于实际项目的开发者来说是非常有价值的资源。

    Struts+Hibernate+Spring整合的例子

    Hibernate是一个对象关系映射(ORM)工具,简化了数据库操作,将Java对象与数据库表进行映射;Spring则是一个全面的后端应用框架,提供了依赖注入、AOP(面向切面编程)以及众多其他功能,使得应用的结构更加清晰。 ...

    省市县三级联动+全国行政区划json数据包

    在IT领域,尤其是在前端开发中,"省市县三级联动"是一种常见的功能,它涉及到用户界面中的下拉选择框,用于选择国家、省份、城市及区县等地理信息。这种功能通常应用于地址输入、物流配送、门店查找等场景,提供用户...

    省市区三级联动C#源代码(含全国各地市数据库)无刷新非ASMX服务

    标题中的“省市区三级联动C#源代码(含全国各地市数据库)无刷新非ASMX服务”指的是一个基于C#编程语言实现的Web应用程序,用于在网页上实现省、市、区三级联动的选择功能,且无需页面刷新。这个系统通常用在用户填写...

    spring mvc mybatis 整合源码,带数据库脚本,带详细注释

    总结,这个压缩包提供了一个完整的Spring MVC和MyBatis整合的示例,包含了数据库脚本和详尽的注释,无论你是初学者还是有经验的开发者,都能从中受益。通过研究源码,你可以掌握Web应用的开发流程,理解Spring MVC和...

    安卓三级联动省市联动多级联动相关-wheelview分享省市县三级联动.zip

    在Android开发中,"三级联动省市联动多级联动"是一个常见的需求,特别是在涉及到地理位置选择或者地址填写的场景。这个需求通常涉及到三个级别的数据关联:省、市、县(区),用户在选择一个省后,相应的市会动态...

Global site tag (gtag.js) - Google Analytics