随笔-28  评论-15  文章-81  trackbacks-0

本例子是由MySQL数据库,结合前台使用Struts来完成的。主要是为了说明DWR的使用,所以对于数据库的设计等等都较简单,大家觉得那里有什么不合理之处请给我留言!数据库创建的脚本在附件里面。
数据库的大概设计是,共有三个字段[id,name,parentid],顾名思义,id就是唯一标示一条记录,name存放的是省市县的名称,parentid存放的其上级的id,例如对于省一级别的,其parentid全部为0,对于市一级别的,其parentid存放的是所对应省的id,对于县一级别的,其parentid存放的是所对应市的id。
首先在进入显示页面的时候就把所有的parentid=0的全部查出来,初始化进入省所在的下拉列表中,然后根据选择省的下拉列表,通过DWR调用java方法将其所对应的市取出来,以此类推……
这里主要需要说明的是在web.xml里面需要配置如下:

代码
  1. <servlet>  
  2.       <servlet-name>dwr-invoker</servlet-name>  
  3.       <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>  
  4.       <init-param>  
  5.          <param-name>debug</param-name>  
  6.           <param-value>true</param-value>  
  7.        </init-param>  
  8.     </servlet>  
  9.     <servlet-mapping>  
  10.         <servlet-name>dwr-invoker</servlet-name>  
  11.         <url-pattern>/dwr/*</url-pattern>  
  12.     </servlet-mapping>  

然后在web.xml的同目录下,创建一个dwr.xml,配置如下:
代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 0.4//EN" "http://www.getahead.ltd.uk/dwr/dwr.dtd">  
  3. <dwr>  
  4.   <allow>  
  5.     <create creator="new" javascript="province">  
  6.       <param name="class" value="com.xinli.struts.service.ProvinceService"/>  
  7.     </create>  
  8.   </allow>  
  9. </dwr>  
对于dwr.xml需要说明的是:
1.creator:定义供javascript调用的新建对象的方法,也即对象的构造方法。其可以包括【new,none,scripted,spring,jsf,struts,pageflow,ejb3】关于creator的具体用法,可以参照http://getahead.org/dwr/server/dwrxml/creators
2.javascript:java类暴露给浏览器所调用的javascript的名称,也就是在jsp页面所出现的js的名称一定和此处所定义的一致。
3.param:指定create元素所需要的参数,比如其允许创建的java类的名称。
4.name:param元素所指定的参数名称。
5.value:param元素所指定的参数值。
后台业务方法实现如下ProvinceDAO
代码
  1. package com.xinli.struts.dao;   
  2.   
  3. import java.sql.Connection;   
  4. import java.sql.ResultSet;   
  5. import java.sql.SQLException;   
  6. import java.sql.Statement;   
  7. import java.util.HashMap;   
  8. import java.util.Map;   
  9.   
  10. import com.xinli.struts.db.DBManager;   
  11.   
  12. /**  
  13.  * @author fuhao  
  14.  */  
  15. public class ProvinceDAO {   
  16.   
  17.     private static Connection conn = null;   
  18.   
  19.     private static Statement stmt = null;   
  20.   
  21.     private static ResultSet rs = null;   
  22.        
  23.     // 全取所有的parentid=0的记录,也即将所有的省查询出来,放入Map中   
  24.     public Map getFirst() throws SQLException {   
  25.         Map map = new HashMap();   
  26.         String sql = "select * from province where parentid = " + 0;   
  27.         try {   
  28.             conn = DBManager.getConnection();   
  29.             stmt = conn.createStatement();   
  30.             rs = stmt.executeQuery(sql);   
  31.             while (rs.next()) {   
  32.                 map.put(rs.getInt("id"), rs.getString("name"));   
  33.             }   
  34.             return map;   
  35.         } catch (Exception e) {   
  36.             System.out.println("----获得省的方法出现异常:" + e);   
  37.             e.printStackTrace();   
  38.             return null;   
  39.         } finally {   
  40.             if (rs != null && stmt != null && conn != null) {   
  41.                 rs.close();   
  42.                 stmt.close();   
  43.                 conn.close();   
  44.             }   
  45.         }   
  46.     }   
  47.     // 根据parentid获得其下所对应的记录   
  48.     public Map getChildByParentId(String id) throws SQLException {   
  49.         Map map = new HashMap();   
  50.         String sql = "select * from province as p where p.parentid =" + id;   
  51.         try {   
  52.             conn = DBManager.getConnection();   
  53.             stmt = conn.createStatement();   
  54.             rs = stmt.executeQuery(sql);   
  55.             while (rs.next()) {   
  56.                 map.put(rs.getInt("id"), rs.getString("name"));   
  57.             }   
  58.             return map;   
  59.         } catch (Exception e) {   
  60.             System.out.println("----根据父id获得子记录的方法出现异常:" + e);   
  61.             e.printStackTrace();   
  62.             return null;   
  63.         } finally {   
  64.             if (rs != null && stmt != null && conn != null) {   
  65.                 rs.close();   
  66.                 stmt.close();   
  67.                 conn.close();   
  68.             }   
  69.         }   
  70.     }   
  71. }  
posted on 2007-10-17 01:14 谭明 阅读(605) 评论(0)  编辑  收藏 所属分类: AJAX

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


网站导航: