欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-05 17:40:25
...

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

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

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

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

 

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>