jsp的代码:
设备类别:<select name="leibie1" id="leibie1" onclick="getnumber()">
<%
   dataDao dd1=new dataDao();
   ArrayList<Device> list1=dd1.alldevice();
   Device dv1=new Device();
   for(int i=1;i<=dd1.getDevice();i++){
      dv1=list.get(i-1);%>
      <option value=<%=dv1.getDname()%>><%=dv1.getDname()%></option><%
   }
%>
</select><br>                          
设备通讯地址:<select name="cong1" id="cong1">
<%
     dataDao dd2=new dataDao();
     ArrayList<UserMessage> umal=dd2.getUserMessage("1");//1为leibie1的值
     UserMessage um=new UserMessage();
     for(int i=1;i<=umal.size();i++){
        um=umal.get(i-1);%> 
        <option value=<%=um.getNumber()%>><%=um.getNumber()%></option><%
     }
%>
目的:
使"设备类别"和"设备通讯地址"级联操作,即单击设备类别,显示相应的设备通讯地址,设备通讯地址是根据leibie1的值来获得的
要求:
用ajax实现,我用的是mysql数据库,要求局部刷新

解决方案 »

  1.   

    用DWR吧,方法写在onchange事件里,每次“设备类别”变动就调用一次,根据查询到的集合重新设置“设备通讯地址”里的option就行
      

  2.   

    楼主,我做了好多次这种功能了,用DWR是最方便的,下面的代码是页面上的调用信息,你只需要配置下dwr的配置文件,后台查询数据就可以了,大体思路和方法就是这样的,祝楼主早日搞定哈。<!-- 下面是dwr需要的js -->
    <script type="text/javascript" src="../dwr/engine.js"> </script>
    <script type="text/javascript" src="../dwr/util.js"> </script>
    <script type="text/javascript" src="../dwr/interface/admin.js"> </script>
    <script type="text/javascript" language="javascript">
    ///根据设备类别,选择设备通讯地址
    function selectAddress() /**设备类别onchange事件的入口**/
    {
    var selDept = document.getElementById("selDept"); /**获得设备类别的select对象**/
    var temp = selDept.selectedIndex;
    var dept_no = selDept.options[temp].value; /**得到选择的设备类别的编号**/
    if(dept_no != 0)
    {
    admin.getAddress(dept_no,okAddress); /**这里是dwr异步的调用,把设备类别编号传进去,查询出设备通讯的实体信息,dwr需要在配置文件里面配置一下,admin对应dwr配置文件里的动态js,getAddress是配置文件里对应提交类的方法,既查询方法**/
    }
    else
    {
    return;
    }
    }
    function okAddress(data) /**这就是dwr异步的回调函数,返回的data是个List装的设备通讯地址的实体信息**/
    {
    var selAddress = document.getElementById("selAddress"); /**获得页面上设备通讯的select对象,下面动态装入就OK了**/
    selAddress.innerHTML = "";
    selAddress.options.add(new Option("----请选择员工----",0));
    for(var i=0;i<data.length;i++) 
    {
    selAddress.options.add(new Option(data[i].address_name,data[i].address_no));
    }
    }
      

  3.   

    在onchange事件里用ajax的返回值动态的设置 设备通讯地址 中的option的值就可以了
      

  4.   

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>My JSP 'index.jsp' starting page</title>
    <script type='text/javascript' src='/aaa/dwr/interface/add.js'>
    </script>
    <script type='text/javascript' src='/aaa/dwr/engine.js'>
    </script>
    <script type='text/javascript' src='/aaa/dwr/util.js'>
    </script><script language="javascript"
    src="<%=request.getContextPath()%>/jquery-1.3.2.js"></script>

    <script type="text/javascript">
    function getList(s){
    add.add(s, function(list){
    var option = "";
    if(null != list){
    $.each(list, function(i){  // 遍历返回的list
    option += "<option value=''"+list[i]+"''>" + list[i]+"</option>";
    });
    }
    $("#list option").remove();  // 添加时先将之前的删掉
    $("#list").append(option);   // 添加
    });
    }

    </script> </head> <body> <select onchange="getList(this.value)" style="width: 90px">
    <option value="1">小写</option>
    <option value="2">大写</option>
    </select> <select id="list"  style="width: 90px"> </select> </body>
    </html>
    package com;import java.util.ArrayList;
    import java.util.List;public class AddList { public List add(String s){
    List list = new ArrayList();

    if("1".equals(s)){
    list.add("aaa");
    list.add("bbb");
    list.add("ccc");
    list.add("ddd");
    } else {
    list.add("AAA");
    list.add("BBB");
    list.add("CCC");
    list.add("DDD");
    }
    return list;
    }

    }
    刚试过的,list自己查找数据库里咯,
    俺用JQuery 做的,
    JS方面应该还蛮好的,呵呵,
      

  5.   

    index.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>My JSP 'index.jsp' starting page</title>
    <script type='text/javascript' src='/aaa/dwr/interface/add.js'>
    </script>
    <script type='text/javascript' src='/aaa/dwr/engine.js'>
    </script>
    <script type='text/javascript' src='/aaa/dwr/util.js'>
    </script><script language="javascript"
    src="<%=request.getContextPath()%>/jquery-1.3.2.js"></script>
    <script type="text/javascript">
    function getList(s){
    add.add(s, function(list){
    var option = "";
    if(null != list){
    $.each(list, function(i){  // 遍历返回的list
    option += "<option value=''"+list[i]+"''>" + list[i]+"</option>";
    });
    }
    $("#list option").remove();  // 添加时先将之前的删掉
    $("#list").append(option);   // 添加
    });
    }

    </script> </head> <body> <select onchange="getList(this.value)" style="width: 90px">
    <option value="1">小写</option>
    <option value="2">大写</option>
    </select> <select id="list"  style="width: 90px"> </select> </body>
    </html>
    后台java类
    package com;import java.util.ArrayList;
    import java.util.List;public class AddList { public List add(String s){
    List list = new ArrayList();

    if("1".equals(s)){
    list.add("aaa");
    list.add("bbb");
    list.add("ccc");
    list.add("ddd");
    } else {
    list.add("AAA");
    list.add("BBB");
    list.add("CCC");
    list.add("DDD");
    }
    return list;
    }

    }
    试试效果,难怪人家比我的好看
      

  6.   

    我下载了dwr.jar,放在WEB-INF/lib目录下
    jsp代码如下:
    <script type='text/javascript' src='/dwr/interface/dwrgetnumber.js'></script> <!-- 这个将会自动生成,dwrgetnumber.js 根据情况自定义! -->   
      <script type='text/javascript' src='/dwr/engine.js'></script>   
      <script type='text/javascript' src='/dwr/util.js'></script>
      <script language="javascript">
         function getnumber(){
           var lb=document.getElementById("leibie1");//获得设备类别对象
           var lbno=lb.selictedindex;//获得设备类别编号
           var lbvalue=document.getElementById("leibie1").value;//获得设备类别
           if (lbvalue!=null)
           {
              dwrgetnumber.Send(lbvalue,callback);
           }
           else
           {
             return;
           }
         }
         function callback(data){  
           var congAddress=document.getelementbyid(cong1); 
           congAddress.innerhtml="";
           for(var i=0;i<data.length;i++)
           {
              congAddress.options.add(new option(data[i]));
           }   
        }  
      </script> dwr.xml代码如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE dwr PUBLIC  "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"   
    "http://www.getahead.ltd.uk/dwr/dwr20.dtd">
    <dwr>
      <allow>
        <create creator="new" javascript="dwrgetnumber">
          <param name="class" value="dwr.dwrgetnumber" />
        </create>
      </allow>
    </dwr>     
    dwrgetnumber.java代码如下:
    package dwr;import hib.HibernateSessionFactory;import java.util.ArrayList;import antlr.collections.impl.Vector;import Bean.UserMessage;
    import Dao.dataDao;public class dwrgetnumber {
    public String[] Send(String dname){//根据设备类别获得从设备号
    ArrayList<UserMessage> umal=null;
    String data[]=null;
    try {
    dataDao dd=new dataDao();
    UserMessage um=new UserMessage();
    String congnumber=dd.findcid(dname);//获得设备类别号
    umal=dd.getUserMessage(congnumber);//根据设备类别代号查找记录
    data=new String[umal.size()];
    for(int i=1;i<=umal.size();i++)
    {
    um=umal.get(i-1);
    data[i]=um.getNumber();
    }
        } catch (Exception e){
            e.printStackTrace();
        }
            return data;
        }
    }
    web.xml代码如下:
    <servlet>  
        <servlet-name>dwr-invoker</servlet-name>
        <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
        <init-param>
          <param-name>debug</param-name>
          <param-value>true</param-value> 
        </init-param> 
        <init-param>
          <param-name>scriptCompressed</param-name>
          <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>dwr-invoker</servlet-name>
        <url-pattern>/dwr/*</url-pattern>
      </servlet-mapping>  
    为什么我单击leibie1时,getnumber()执行到dwrgetnumber.Send(lbvalue,callback);
    时出错,错误:dwrgetnumber未定义
      

  7.   

    解决了,原来是把
    <script type='text/javascript' src='/dwr/interface/dwrgetnumber.js'></script>   <script type='text/javascript' src='/dwr/engine.js'></script>   
    <script type='text/javascript' src='/dwr/util.js'></script>
    改成
    <script type='text/javascript' src='dwr/interface/dwrgetnumber.js'></script>   <script type='text/javascript' src='dwr/engine.js'></script>   
    <script type='text/javascript' src='dwr/util.js'></script>