ajax和js实现下拉列表级联的两种方式(ajax和dwr)

今天遇到一个问题:

有三个下拉列表,分别是:消息大类,消息中类,消息小类;要用级联的方式展现:如图:



 当选择 消息大类 时 ,刷出消息中类,内容只包含 大类选择条件下的类型!同理  选择中类 刷出小类!

(注意这里的下拉列表的值 是从数据库中查出来的,不是写死在html;

从数据库中查出来的数据,特别是中类和大类难免有些重复现象,怎么取出重复呢?看这里(使用map转换整理中)

下面用两种方法来介绍 下拉列表级联:

1.dwr方式:
具体的dwr配置请看:

下面只介绍级联用到的js:

 

 

function getChild(pareantType,childType){
		if(pareantType==null||pareantType.length<1)
			 // parentType:当前下拉列表的参数(可更具自己的查询条件,传值【可以是选中的code,或type....】) 
			 //childType:要刷出子列表的 参数(同上) 
	    {
	        return;
	    }    
	    try
	    {  
		    var id = document.getElementById(pareantType).value;
	    	MsgTypeService.getMsgType(id,childType,function(data)
	    			 // id : 查询使用到的条件,更具自己的Service用的参数,可以传零到多个 
	    			 // data: service放回的list 也就是子列表中显示的数据了
	    	{		
	    		if(data!=null)
	    		{		var oBtsTypeNumber=document.all(childType);
	    				while( oBtsTypeNumber.childNodes.length>0) {  
   								oBtsTypeNumber.removeChild(oBtsTypeNumber.childNodes(0));
   							}
   						var op= document.createElement("Option")
   						op.value="";
	    				op.text="--全部--";
	    				oBtsTypeNumber.add(op);
	    				//这里是将 子列表中数据清空
					for(i=0;i<data.length;i++)
					{
				    		var no=document.createElement("Option");
				    		 //为子列表添加数据,遍历 
				        	no.value= data[i].code;   
				          	no.text = data[i].midType; 

				          	//注意这里的 code 和midType这两个值,是 ,返回 list 的泛型(的两个字段),并且,在配置dwr.xml时要注意,和泛型相一致,否则会出现,code或midType为空或不是对象的错误警告! 
				          	oBtsTypeNumber.add(no);  
				            if("${pareantType}"==data[i].midType){
				           		no.selected="true";  	
				         	 } 	
  					 	}
	    		}
	    	});
	    }
	    catch(e)
	    {}
	}

 

 

 

,解释一下:返回list的泛型:

dwr.xml:

 

<convert converter="bean" match="com.iman.nrms.nrmwns.prm.message.domain.model.MsgType"/>	

		//  com.iman.nrms.nrmwns.prm.message.domain.model.MsgType  dwr 调用返回list 的泛型
		<create creator="spring" javascript="MsgTypeService">
            <param name="beanName" value="msgTypeService"/>
			<include method="getMsgType"/>
			<include method="getMsgMidType"/>  
			
		</create>

		在哦jsp页面代码中 用到的 code 和midType 都是 MsgType 这个po中的属性!,根据自己的需要!再在这里配置!

 

 下面就是掉 dwr的方法了:

<td width="4%" rowspan="3"><img src="${path}/page/wrm/image/search.gif" width="40" height="39"></td>
       <td nowrap="nowrap">消息大类</td>
	        
	   <td>
	    
	   <s:select list="msgBigTypeList"  name="msgType.bigType" onchange="getMidType('bigType','midType');"
	   				  id="bigType" cssClass="select" headerKey="" headerValue="--请选择--" listKey="code" listValue="bigType"></s:select>
	   
	   </td>
	   <td nowrap="nowrap">消息中类</td>
	        
	   <td>
	    
	   <s:select list="msgMidTypeList" name="msgType.midType"  onchange="getSmlType('midType','smlType');"
	   				  id="midType" cssClass="select" headerKey="" headerValue="--请选择--" listKey="code" listValue="midType"></s:select>
	   

  

方法2:(推荐使用方法)

 

这个方法首先要为每一个 </td>下拉列表写一个 function();

 

这里用到了三个下拉列表,级联了两次,就要写两个:

  

/**

 大类与中类级联
 */
    function getMidType(parentValue,childName){

    	var url= "${path}/message/getMidTypeByBigType.action";
    	var propertyName = "midType";
    	fnGetChildValueList(parentValue , childName , url , propertyName );
    }
    /**
    中类与小类级联
    */
    function getSmlType(parentValue , childName )
    {
    	
    	var url= "${path}/message/getSmlTypeByMidType.action";
    	var propertyName = "smlType";
    	fnGetChildValueList(parentValue , childName , url , propertyName);
    	
    }


    /**
     * 下拉框级联
     * @param {Object} parentValue
     * @param {Object} child 必须在当前页面的第一个Form表单中的name属性或者下拉框对象的id
     * @param {Object} url
     * @param {Object} propertyName
     * @param {String} callBack //结束后,要调用的函数名
     */
    function fnGetChildValueList(parentValue , child , url , propertyName )
    {
    	if(!parentValue||!child)
    	{
    		return;
    	}

    	var oChild = document.forms[0][child];
    	if(typeof oChild != 'undefined')
    	{
    		try{
    			oChild = $(child);
    		}catch(e){return;}
    		
    		if(!oChild){
    			return;
    		}
    	}
        var ops=oChild.options;
        while(ops.length>0){
            oChild.remove(ops.length-1);
        }
    	var oOption = document.createElement("OPTION");
    	oOption.setAttribute("text","请选择");
    	oOption.setAttribute("value","");
    	oChild.add(oOption);
    	ajax.sendPostRequest(url , propertyName + "=" + encodeURI(encodeURI(parentValue)) ,function(result){

    		eval("var keyValueList="+result.responseText);
    		for(var i=0; i<keyValueList.length; i++)
    		{
    			var keyValue=keyValueList[i];
    			var oOption = document.createElement("OPTION");
    			oOption.setAttribute("text",keyValue.value);
    			oOption.setAttribute("value",keyValue.key);
    			oChild.add(oOption);
    			
    		}
    	});
    }

 

注意这里用到的:keyValueList

要在Action中包装:

 

 

public String getMidTypeByBigType(){
		
		try {
			msgMidTypeList = this.msgTypeService.getMidTypeByBigType(java.net.URLDecoder.decode(midType, "UTF-8"));
			List<KeyValue> keyValueList = new ArrayList<KeyValue>();
			if (msgMidTypeList != null) {
				for (MsgType c : msgMidTypeList) {					
						keyValueList.add(new KeyValue(c.getCode(), c.getMidType()));
				}
			}
//			向客户端直接输出文本数据
			renderText(keyValueList.toString());
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return null;
	}

 

 

 

 

掌握DWR:Web应用中的Java与JavaScript交互 本文还有配套的精品资源,点击获取 简介:Direct Web Remoting (DWR) 是一个使***ript服务器端Java对象交互更简单的Java库,它简化了Ajax技术的实施。本文将介绍DWR的配置、实现实时用户名检测、利用回调函数处理数据、实现级联下拉列表等关键技术点。通过详细步骤,您将学会如何配置DWR以及如何在Web应用中使用它来增强前后端的交互用户体验... 阅读详情

相关推荐

Ajax实现下拉列表从数据库读取数据级联

Ajax实现下拉列表从数据库读取数据级联

JavaScript实现下拉框动态绑定与级联功能

在Web项目开发中,经常使用下拉框的级联功能,下面将介绍如何使用JavaScript实现下拉框的动态绑定与级联功能。 1、相关知识点说明 1.1 清空下拉框选项 在每次绑定下拉框选择项数据前,都需要先清除该下拉框原有的选择项数据。 //获取下拉框对象 let selProvince = document.getElementById("selProvince"); //清空下拉框选项 ...

pan_junbiao的博客 5771

Vc出现不能连接到一个或多个 vCenter server 系统:http://vcenter-vx.utibet.edu.cn:443/sdk

问题描述: 解决办法: esxi6.7的bug 第一种通过升级系统来解决问题 第二种是通过删除数据来解决 第一步:进入到esxi的shell 第二步查看其中的服务开启状态 第二步 df -h 第三步 /opt/vmware/vpostgres/current/bin/psql -d VCDB -U postgres 第四步 SELECT nspname || '.' || relname AS "relation", pg_size_pretty(pg_total_relation_size(C.oi

m0_49328536的博客 9874

JS简单实现级联下拉框(添加选项、删除、清空)

JavaScript简单实现级联下拉框小功能记录 这里用"省份与城市"作为级联对象,在HTML头部来引用JS代码来实现实现思路: 以下内容,我们省份用prov表示,城市用city表示。 (1)在JS中我们可以使用document.getElement(id)来获取指定id的标签元素。 (2)对于<select></ select>标签,获取到的则这个下拉框中的定位符。...

码农米格的博客 4211

级联下拉列表 ajax实现两种方式

案例:设置一个级联下拉列表,省市区,根据id进行查找,同属于同一个省的城市前两位id相同,属于同一个市的区前4位id相同 数据库数据如下(部分): 第一种方式:通过获取json对象,然后进行解析json对象数组,动态创建下拉列表 1:Dao代码如下: package com.oracle.dao; import java.util.List; import com.orac

奔跑的年糕 9211

SystemVerilog中typedef的7种实战用法:从基础到高级配置

本文深入探讨SystemVerilog中typedef的7种实战用法,从基础类型定义到高级配置应用。通过具体代码示例,展示了如何利用typedef提升代码可读性、解决循环依赖、实现参数化类设计、精确控制位宽、建模复杂数据结构、确保UVM配置数据库类型安全以及标准化接口促进IP复用。这些技巧能显著增强SystemVerilog代码的维护性复用性。

weixin_30505225的博客 662

Ajax应用之级联下拉列表

随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666) 在实际项目中经常用到列表联动,比如省份、城市、区域三级联动,这里简要以二级联动来进行演示,思路很简单: 1、程序进入后首先调用获取省份方法getProvince,使用Ajax向服务器请求省份数据。 2、回调函数...

孤云博客 1073

使用dwr实现下拉框级联js实现动态选择option的selected状态方法总结

一。第一次使用dwr,原因是需要实现级联。第一次用js动态实现option的selected的方法,整蛊了2天总算把这些问题给解决。 1.配置web.xml <!-- DWR配置 --> <servlet> <servlet-name>dwr-test</servlet-name> <...

weixin_30906425的博客 160

DWR二级菜单级联

index.html   function update1() {        ItemsBean.ClassList(createList1); } function createList1(data) {     DWRUtil.removeAllOptions("classid");     DWRUtil.addOpt

yangdeng111的专栏 562

DWR实现级联

DWR实现级联关键字: ajax-dwrdwr2.0 web.xml配置: dwr-invoker org.directwebremoting.servlet.DwrServlet debug true classes java.lang.Object 100 dwr-invoker /dwr/* 操作类 public class DwrTest { @SuppressW

月黑杀人夜,风高放火时! 1163

DWR框架技术轻松实现动态级联菜单

这里说的动态级联菜单,指的是两个或多个下拉框(对应HTML中的SELECT标签),它们存在父子关系。其中某个下拉框的值发生变化时,它的子下拉框可选择的值也会发生变化,并且这些变化的值都是动态地从数据库中取出来的。以前用其他方式实现过,但有的有些小BUG,有的代码可读性差,或者实现代码很多,实现起来麻烦,维护起来也麻烦。最近看了一下DWR,总算用一种比较轻松的方式实现了动态级联菜单。实现方法

关注软件研发 1214

Ajax技术dwr框架两种方式实现下拉列表级联效果

在开发web页面时,常常需要达到某一个文本输入框,更多的是下拉框随另一个下拉框的改变而改变值的"联动"效果。实现这种效果,往往需要我们跟后台进行交互。 这里,我将分别介绍如何使用ajax技术dwr框架,实现下拉列表的联动效果。 需要实现级联效果的下拉列表: [code="html"]业务 ...

Try My Best 尽力而为 195

基于Ajax(DWR)的二级联动下拉菜单

很多朋友在做多级联动下拉菜单时都碰到了问题,Google上能找到的大部分也是基于javascript数组的实现,超多3级联动时,就会很复杂,甚至出现4维、5维的数组。这里介绍一个Ajax的方法,也是页面无刷新的,但是是从数据库实时查询的,在数据量大时较js数组的方法性能要好很多,实现起来也方便。废话少说,直接看代码:由于大家用的数据库五花八门,我就用几个数组来代替rs,在实际应用中只要把实时查询的

边城刀声 4135

基于Ajax的二级联动下拉菜单

很多朋友在做多级联动下拉菜单时都碰到了问题,Google上能找到的大部分也是基于javascript数组的实现,超多3级联动时,就会很复杂,甚至出现4维、5维的数组。这里介绍一个Ajax的方法,也是页面无刷新的,但是是从数据库实时查询的,在数据量大时较js数组的方法性能要好很多,实现起来也方便。废话少说,直接看代码:由于大家用的数据库五花八门,我就用几个数组来代替rs,在实际应用中只要把实时查询的

danning之道 3043

DWRjsp中的使用技巧

什么是DWRDWR是一种AJAX解决方案!  DWR包括一个java库,以及一套javascript,使得我们可以用一种非常简单的方式,在页面上使用javascript直接调用后台的java对象! DWR架构  DWRjavascript库包括几个部分:dwrjavascript引擎(即对AJAX调用的封装)、dwr提供的一些非常有用的辅助javascript函数库、以

java程序员的蜕变之路 2906

利用DWR实现级联菜单

DWRAjax的一个开源框架,可以很方便是实现调用远程Java类,然后采用回调函数取到返回值,以下是一个利用DWR实现的二级级联菜单:package com.test.db;import java.util.*;import java.sql.*;public class ItemsBean {           public ItemsBean() {    }        publi

不随黄叶舞秋风 2853

JSP的那些事儿(2)----DWR2.0 的配置使用

      刚开始用JSP开发网站项目,发现下拉菜单级联不及ASP.NET那么便利,于是寻找JAVA中的AJAX框架,至于AJAX是什么,本文就不再叙述,而DWR是不得不说的一个亮点,在网络上找了很多资料,按照过程一步步的配置,结果发现还是没有显示,今天才终于获取成功,所以决定花点时间写本篇文章帮助“菜鸟一族”脱离不会配置使用DWR的苦海。如有什么意见可以提出。      如有转载请注明

薛敬明的专栏 2657

DWR开发AJAX 简单例子介绍

DWR开发AJAX 简单例子介绍 1.    首先下载 dwr.jar包,下载地址:  http://directwebremoting.org/dwr/2.    在应用中引入 dwr.jar包3.    修改web.xml配置文件servlet>      servlet-name>dwrservlet-name>      servlet-class>org.

chensugang的专栏 2361

DWR框架技术实现下拉动态级联

这里说的动态级联菜单,指的是两个或多个下拉框(对应HTML中的SELECT标签),它们存在父子关系。其中某个下拉框的值发生变化时,它的子下拉框可选择的值也会发生变化,并且这些变化的值都是动态地从数据库中取出来的。 以前用其他方式实现过,但有的有些小BUG,有的代码可读性差,或者实现代码很多,实现起来麻烦,维护起来也麻烦。最近看了一下AJAX框架技术DWR,总算用一种比较轻松的方式实现了动态级联

jwlsky 650
上一篇: 优秀程序员的45个习惯之42——允许大家自己想办法
下一篇: web mime-mapping 作用
younglibin
博客等级 码龄18年 6粉丝 288原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值