我的漫漫程序之旅

专注于JavaWeb开发
随笔 - 39, 文章 - 310, 评论 - 411, 引用 - 0
数据加载中……

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

网上看到一些例子,对于一个简单的三级联动,都加上什么Struts,
Hibernate诸如此类的框架。这个Ajax联动殊不知和这些框架有什么
关系,一个小Demo干嘛整得那么大。

今天我做了一个dwr+jsp做的例子。

web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation
="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
>
    
<servlet>
        
<servlet-name>dwr-invoker</servlet-name>
        
<servlet-class>
            org.directwebremoting.servlet.DwrServlet
        
</servlet-class>
        
<init-param>
            
<param-name>debug</param-name>
            
<param-value>true</param-value>
        
</init-param>
    
</servlet>
  
<servlet>
    
<servlet-name>SelectServlet</servlet-name>
    
<servlet-class>com.action.SelectServlet</servlet-class>
  
</servlet>

    
<servlet-mapping>
        
<servlet-name>dwr-invoker</servlet-name>
        
<url-pattern>/dwr/*</url-pattern>
    
</servlet-mapping>
  
<servlet-mapping>
    
<servlet-name>SelectServlet</servlet-name>
    
<url-pattern>/select</url-pattern>
  
</servlet-mapping>

    
<welcome-file-list>
        
<welcome-file>index.jsp</welcome-file>
    
</welcome-file-list>
</web-app>

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>

    
<!-- 没有它DWR什么也做不了 -->
    
<allow>
        
<create creator="new" javascript="menu">
            
<param name="class" value="com.dao.CountryDAO" />
        
</create>
        
<!-- 要转换的Bean -->
         
<convert converter="bean" match="com.vo.Country" />
         
<convert converter="bean" match="com.vo.Province" />
         
<convert converter="bean" match="com.vo.City" />
    
</allow>
</dwr>
test.jsp:
<%@ page language="java" import="java.util.*,com.vo.*"
    pageEncoding
="GBK"
%>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
<html>
    
<head>
        
<title>DWR三级联动</title>
        
<script type='text/javascript'
            
src='/mutiplyMenu/dwr/interface/menu.js'></script>
        
<script type='text/javascript' src='/mutiplyMenu/dwr/engine.js'></script>
        
<script type='text/javascript' src='/mutiplyMenu/dwr/util.js'></script>
    
</head>

    
<body>
        
<script type="text/javascript">
    
//根据国家id查询所属省或州
    function queryProvince()
    
{
        
var countryId = $("country").value;
        
//默认为不选择
        if(countryId == 0)
        
{
            $
{"province"}.options.length=0;
            $
{"city"}.options.length=0;
        }

        
else
        
{
            menu.queryProvinceById(countryId,provinceCallback);
        }
    
    }

    
//根据国家id查询所属省或州的回调函数
    function provinceCallback(provinces)
    
{
      $
{"province"}.options.length=0;
      
//每次获得新的数据的时候先把每二个下拉框架的长度清0
      for(var i=0;i< provinces.length;i ++){
        
var value = provinces[i].id;
        
var text = provinces[i].provinceName;
        
var option = new Option(text, value);
        
//根据每组value和text标记的值创建一个option对象
        try{
          $(
"province").add(option);//将option对象添加到第二个下拉框中
        }
catch(e){
        }

      }

      
//同时关联第三级
      var provinceId = ${"province"}.value;
      menu.queryCityById(provinceId,cityCallback);
    }

    
//查询所属城市
    function queryCity()
    
{
        
var provinceId = $("province").value;
        menu.queryCityById(provinceId,cityCallback);
    }

    
//查询所属城市回调函数
    function cityCallback(citys)
    
{
      
//每次获得新的数据的时候先把每三个下拉框架的长度清0
      ${"city"}.options.length=0;
      
for(var i=0;i< citys.length;i ++){
        
var value = citys[i].id;
        
var text = citys[i].cityName;
        
var option = new Option(text, value);
        
//根据每组value和text标记的值创建一个option对象
        try{
          $(
"city").add(option);//将option对象添加到第三个下拉框中
        }
catch(e){
        }

      }

    }

    
    
function change1()
    
{
        queryProvince();
    }

    
    
function change2()
    
{
        queryCity();
    }

</script>
        
<div align="center">
            
<h3>
                
<br>
            
</h3>
            
<h3>
                DWR三级联动演示
            
</h3>
            
<!-- 我都奇怪了,我的<c>标签在这里不能用 -->
            
<select id="country" onchange="change1();">
                
<option selected="selected" value="0">
                    请选择
                
</option>
                
<%
                    @SuppressWarnings(
"unchecked")
                    List list 
= (List) request.getAttribute("countrys");
                    
for (int i = 0; i < list.size(); i++)
                    {
                        Country temp 
= (Country) list.get(i);
                
%>
                
<option value="<%=temp.getId()%>"><%=temp.getCountryName()%></option>
                
<%
                    }
                
%>
            
</select>

            
<select id="province" onchange="change2();">

            
</select>


            
<select id="city">
            
</select>
        
</div>
    
</body>
</html>

servlet,dao就不帖了,想了解的可以去下载源码。点此下载

posted on 2008-05-29 11:59 々上善若水々 阅读(4666) 评论(2)  编辑  收藏 所属分类: AJAX

评论

# re: 纯JSP+DWR实现三级联动下拉选择菜单[未登录]  回复  更多评论   

强~下来学习学习。
2008-05-30 17:47 | 草儿

# re: 纯JSP+DWR实现三级联动下拉选择菜单  回复  更多评论   

这么下载不了源码啊
2010-01-21 16:48 | 王利

只有注册用户登录后才能发表评论。


网站导航: