`

DWR 制作 ajax 国家地区级联菜单

阅读更多
java 文件内容:


/**
 * 主要实现地址的查询
 */
public class Address {
	private AddressService addressService;

	/**
	 * 查询国家 @ Write time: 2007-6-26 下午02:39:07 <Br>
	 * @return List<State><br>
	 */
	public List getCountries() {
		List countries = null;
		countries = addressService.getAllCountry();
		return countries;
	}

	/**
	 * 根据国家编号获取省 @ Write time: 2007-6-26 下午02:39:07 <Br>
	 * @param id
	 *            国家编号
	 * @return List<State><br>
	 */
	public List getStates(String id) {
		List states = null;
		if (!isNumber(id)) {
			System.out.println("Country id is not a number!");
			states = new LinkedList();
			return states;
		}

		states = addressService.getStateByCountryId(Long.parseLong(id));
		return states;
	}

	/**
	 * 根据省编号获取市 @ Write time: 2007-6-26 下午02:39:07 <Br>
	 * @param id
	 *            省编号
	 * @return List<City><br>
	 */
	public List getCities(String id) {
		List cities = null;
		if (!isNumber(id)) {
			System.out.println("State id is not a number");
			cities = new LinkedList();
			return cities;
		}

		cities = addressService.getCityByStateId(Long.parseLong(id));

		return cities;
	}
	/**
	 * 根据State 市编号查找 对应 的省
	 */
	public Object getStateByCityId(String id) {

		if (!isNumber(id)) {
			System.out.println("City id is not a number");
			return null;
		}
		return addressService.getStateByCityId(Long.parseLong(id));
	}

	/**
	 * 根据 省编号 查找对应的国家
	 * @author: Sivyer <br>
	 * @write time: 2007-10-12 下午03:14:47  <Br>
	 * @param id
	 * @return<br>
	 */
	public Object getCountryByStateId(String id) {

		if (!isNumber(id)) {
			System.out.println("State id is not a number");
			return null;
		}

		return addressService.getCountryByStateId(Long.parseLong(id));
	}

	private boolean isNumber(String s) {
		Pattern pattern = Pattern.compile("[0-9]");
		Matcher isNum = pattern.matcher(s);
		if (isNum.matches()) {
			return true;
		} else
			return false;
	}

	public AddressService getAddressService() {
		return addressService;
	}

	public void setAddressService(AddressService addressService) {
		this.addressService = addressService;
	}
}



js 文件内容


<!--
/*
 	作者:Sivyer 2007-6
	功能:地址控件,初始化函数: initAddress() 
	注: init()时,需要在页面里定义 country/state/city 的select
		initDiv(),只需要定义一个 Div ,name 设为 "addressDiv"
 
*/


var selCountry = "selCountry";
var selState = "selState";
var selCity = "selCity";

var defaultCountry = -1;
var defaultState = -1;
var defaultCity = -1;

var countryHead = 	{ '-1':'... 请选择国家...'};
var stateHead = 	{ '-1':'...请选择所在省...'};
var cityHead = 		{ '-1':'...请选择所在市...'};

function setDefaultValue(_country,_state,_city){
	defaultCountry = _country;
	defaultState = _state;
	defaultCity = _city;
	
}

function initAddress() {

	if(defaultCountry ==""){
		defaultCountry == -1;
	}
	if(defaultState == ""){
		defaultState == -1;
	}
	if(defaultCity == ""){
		defaultCity == -1;
	}
	
	getCountries();
}

/*
返回国家列表
*/
function getCountries() {
try{
	
	Address.getCountries(function (countries) {
		
		clearCountry();
		
		DWRUtil.addOptions(selCountry , countries, "id", "name");
		DWRUtil.setValue(selCountry,defaultCountry);
		
		getStates();
	});
	}catch(e){
		alert("获取市信息时出错" + e);
	}
}

function getStates() {
	try{
	
	var countryId = getSelectId(selCountry);

	if (countryId != -1) {
		Address.getStates(countryId, function (states) {
			clearState();
			DWRUtil.addOptions(selState, states, "id", "name");
			
			DWRUtil.setValue(selState,defaultState);
			defaultState = getSelectId(selState);
			getCities();
		});
	} else {
		clearState();
		clearCity();
		getCities();
	}
	}catch(e){
		alert("获取省信息时出错!" + e);
	}
	
}
function getCities() {
	try{
		var stateId = getSelectId( selState );
		var countryId = getSelectId( selCountry );
		
		if (stateId != -1 && countryId != -1) {
			Address.getCities(stateId, function (cities) {
				clearCity();
				DWRUtil.addOptions(selCity, cities, "id", "name");
				
				if(getSelectId(selState) != -1 && getSelectId(selCountry) != -1){
					DWRUtil.setValue(selCity,defaultCity);
					defaultCity = getSelectId(selCity);
				}
			});
		}else if(stateId == -1 && countryId == -1 && defaultCity != -1){
			clearCity();
		}
		
	}catch(e){
		alert("获取市信息时出错!" + e);
	}
}

function clearCountry(){
	defaultCountry = -1;
	DWRUtil.removeAllOptions(selCountry);
	DWRUtil.addOptions(selCountry,countryHead);
}
function clearState(){
	defaultState = -1;
	DWRUtil.removeAllOptions(selState);
	DWRUtil.addOptions(selState,stateHead);
}
function clearCity(){
	defaultCity = -1;
	DWRUtil.removeAllOptions(selCity);
	DWRUtil.addOptions(selCity,cityHead);
}

/*
*作者:Sivyer Email:pxysea@163.com
*功能:获取选择的地址编号
*参数:name 可值可以为 country,state,city
*返回:如果选择正确 对应编号,否则返回 -1;
*/
function getSelectId( name ){
	var id;
	if(name == selCountry){
		id = DWRUtil.getValue(selCountry );
	}else if( name == selState ){
		id = DWRUtil.getValue(selState);
	
	}else if( name == selCity ){
		id = DWRUtil.getValue(selCity);
	}
	if(isNaN(id)){
		return -1;
		
	}else{
		return id;
	}
}

function setDefaultValue(sel,value){
	DWRUtil.setValue(sel,value);
}
//-->




dwr.xml 配置文件
<!-- 地址信息配置 -->
         <create creator="spring" javascript="Address">
			<param name="beanName"
				value="addressBean" />
		</create>
		<convert match="com.mp.job.hibernate.vo.Country" javascript="Country" converter="bean"/>
		<convert match="com.mp.job.hibernate.vo.City" javascript="City" converter="bean"/>
		<convert match="com.mp.job.hibernate.vo.State" javascript="State" converter="bean"/>


示例jsp文件
<%
String basePath = request.getContextPath();
%>

<html>
	<head>
		<script type='text/javascript'
			src='<%=basePath%>/dwr/interface/Address.js'></script>
		<script type='text/javascript' src='<%=basePath%>/dwr/engine.js'></script>
		<script type='text/javascript' src='<%=basePath%>/dwr/util.js'></script>
		<script type="text/javascript" src="<%=basePath%>/js/day.js"></script>
		<script type='text/javascript' src='<%=basePath%>/js/address.js'></script>

 </head>
<body>
   国家:
   <select name="companyuser.countryId" id="selCountry"
	onchange="getStates()"	>
   </select>
   这段代码是初始化:如果没有初始值,可只执行 initAddress()方法
   <script type="text/javascript">
     defaultCountry = 1; //初始值;
     defaultState = 1; //初始值;
     defaultCity =  1; //初始值;默认是 -1
      initAddress();
   </script>
   <br/> 省:
   <select name="companyuser.stateId" id="selState" onchange="getCities()">
   </select>
  <br/>市:
  <select name="companyuser.cityId" id="selCity">

  </select>
</body>




分享到:
评论
1 楼 ado88 2007-09-29  
速度如何呢?
超过3000条
是不是很慢a

相关推荐

    Ajax级联菜单,通过dwr框架实现省份城市级联效果

    在这个特定的场景中,我们利用Ajax技术和Direct Web Remoting(DWR)框架来创建一个动态的省份城市级联菜单。这个功能能够提升用户体验,因为它减少了用户手动刷新页面的需求,提供了流畅的交互。 首先,我们需要...

    DWR级联菜单下拉框

    总之,DWR级联菜单下拉框是利用DWR和AJAX技术实现的动态交互功能,它简化了前后端通信,提供了更流畅的用户体验。通过学习和实践这个案例,开发者可以提升在Web应用开发中对DWR、AJAX以及级联菜单设计的理解和应用...

    dwr实现2级级联菜单(sql2000 数据库)

    本篇文章将深入探讨如何利用DWR来实现一个两级级联菜单,并以SQL Server 2000数据库作为数据源。 首先,我们需要理解DWR的基本工作原理。DWR允许在后台执行Java方法并返回结果到前端,无需刷新整个页面。这种技术...

    dwr 实现 级联菜单 外加一本pdf的参考书

    DWR在实现级联菜单中的作用主要体现在以下几个方面: 1. **远程方法调用**:DWR的核心功能是允许JavaScript直接调用服务器端的Java方法。这意味着当用户在前端选择一个菜单项时,可以通过DWR异步地向服务器发送请求...

    级联菜单 java+dwr

    级联菜单(Cascading Menu)在Web应用中是一种常见的交互设计,主要用于展现层次结构的数据,比如国家-省份-城市的关系。在这个例子中,我们利用Java后端技术和Direct Web Remoting (DWR) 框架来实现这种功能。DWR是...

    Struts_Hibernate_Dwr框架整合省份菜单级联

    Direct Web Remoting (DWR) 是一个JavaScript库,它允许JavaScript代码直接调用服务器端的Java方法,实现了AJAX(Asynchronous JavaScript and XML)的功能。在本案例中,DWR将作为前端与后端的桥梁,当用户在前端...

    纯JSP+DWR实现三级联动下拉选择菜单 实现无刷新联动 DWR判断用户是否存在 ajax二级联动菜单 DWR操作数据库模拟实现Google搜索效果

    DWR允许我们通过JavaScript在客户端动态更新下拉菜单选项,当用户在一个菜单中做出选择时,根据选择的值,DWR会自动向服务器发送请求,获取并填充后续级联菜单的内容。这一过程无需用户手动刷新页面,提高了用户体验...

    DWR AJAX 简单示例

    在"**DWR AJAX 简单示例**"中,我们通常会看到一个常见的应用场景,即级联下拉菜单。级联下拉菜单通常用于多级关联的数据选择,例如,选择国家后,相应的省份列表会动态加载;选择省份后,城市列表也会随之更新。...

    ajax的dwr框架简单示例视频

    现在流行的ajax视频教程,几个示例包括用户名验证,级联菜单,dwr框架的应用~是exe格式的

    dwr+struts 三级菜单

    项目中的"dwrt+struts三级级联菜单"可能包含了以下文件: - `struts-config.xml`: Struts框架的配置文件,定义了Action和ActionForm。 - `dwr.xml`: DWR的配置文件,声明了允许JavaScript调用的Java方法。 - Java...

    DWR 联动下拉菜单基本应用

    在本例中,我们将讨论如何利用DWR2版本创建一个联动下拉菜单,这是一种常见的级联选择功能,常见于数据输入表单中,如地址选择,省-市-区的逐级筛选。 首先,我们需要在服务器端设置DWR引擎。这包括创建一个`dwr....

    ajaxdwr select二级联动

    在这个“ajaxdwr select二级联动”的场景中,我们将讨论如何利用这两种技术实现下拉菜单的级联选择效果。 Ajax是一种在无需刷新整个页面的情况下,能够更新部分网页的技术。它通过JavaScript发送异步请求到服务器,...

    用hibernate做的省市县三级级联,

    在IT行业中,尤其是在Web开发领域,省市县三级级联是一个常见的需求,主要用于用户选择地址时提供方便的下拉菜单选择。这种功能可以提高用户体验,减少输入错误。在本项目中,开发者利用了Hibernate这一强大的对象...

    北京中科信软AJAX培训

    实际应用方面,包括了实战技巧如数据校验、级联菜单、条目内容、级联下拉列表等,这些技巧可以在实现AJAX应用时提高效率和用户体验。还有异常处理机制、中文乱码问题及其解决方案等内容,这些都是在进行AJAX编程时...

    纯JSP+DWR实现三级联动下拉选择菜单实现技巧

    当用户在第一个下拉菜单(国家)中选择一个选项时,`menu.js` 的方法会被调用,从而更新第二个下拉菜单(省份)的选项。接着,当省份选择改变时,会进一步更新第三个下拉菜单(城市)的选项。 DWR是一种轻量级的...

    java省市级联下拉菜单实例代码

    在Java Web开发中,省市级联下拉菜单是一种常见的需求,它允许用户在选择省份后自动更新城市下拉菜单,展示对应省份的城市列表。这个实例代码主要涉及的技术点包括Servlet、JSON处理以及简单的数据模拟。 1. **...

    用Java做的省市级联菜单

    下面我们将深入探讨如何利用DWR实现省市级联菜单。 首先,我们需要在后端创建一个Java服务,这个服务通常是一个Servlet或者Controller,负责处理来自前端的请求并返回省市数据。这个服务可能包含以下关键步骤: 1....

    选择国家下拉选,在省份下拉选中填充所有这个国家的省,再选择省,在城市下拉选中填充所有该国家,该省的所有城市的三级联

    在这个场景中,我们使用了DWR(Direct Web Remoting)这一强大的Ajax技术,并结合Oracle数据库来存储和检索数据。 DWR是一种开源Java库,它允许JavaScript与服务器端的Java代码进行实时通信,而无需页面刷新。通过...

    开发Ajax总结

    - **按需取数据**:如级联菜单,根据用户的前一步选择动态加载后续选项。 - **读取外部数据**:例如,从第三方API获取数据并在页面上显示。 #### 二、发送请求及处理响应 ##### 2.1 GET请求 GET请求是最常见的...

    Ext 开发指南 学习资料

    4.4.7. 露一小手,组合上面所知,省市县三级级联。哈哈~ 4.4.7.1. 先做一个模拟的,所有数据都在本地 4.4.7.2. 再做一个有后台的,需要放在服务器上咯 4.5. 把form里的那些控件全部拿出来看看 4.6. form提交数据的...

Global site tag (gtag.js) - Google Analytics