隨筆-28  評(píng)論-15  文章-81  trackbacks-0

          本例子是由MySQL數(shù)據(jù)庫(kù),結(jié)合前臺(tái)使用Struts來(lái)完成的。主要是為了說(shuō)明DWR的使用,所以對(duì)于數(shù)據(jù)庫(kù)的設(shè)計(jì)等等都較簡(jiǎn)單,大家覺(jué)得那里有什么不合理之處請(qǐng)給我留言!數(shù)據(jù)庫(kù)創(chuàng)建的腳本在附件里面。
          數(shù)據(jù)庫(kù)的大概設(shè)計(jì)是,共有三個(gè)字段[id,name,parentid],顧名思義,id就是唯一標(biāo)示一條記錄,name存放的是省市縣的名稱,parentid存放的其上級(jí)的id,例如對(duì)于省一級(jí)別的,其parentid全部為0,對(duì)于市一級(jí)別的,其parentid存放的是所對(duì)應(yīng)省的id,對(duì)于縣一級(jí)別的,其parentid存放的是所對(duì)應(yīng)市的id。
          首先在進(jìn)入顯示頁(yè)面的時(shí)候就把所有的parentid=0的全部查出來(lái),初始化進(jìn)入省所在的下拉列表中,然后根據(jù)選擇省的下拉列表,通過(guò)DWR調(diào)用java方法將其所對(duì)應(yīng)的市取出來(lái),以此類推……
          這里主要需要說(shuō)明的是在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的同目錄下,創(chuàng)建一個(gè)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>  
          對(duì)于dwr.xml需要說(shuō)明的是:
          1.creator:定義供javascript調(diào)用的新建對(duì)象的方法,也即對(duì)象的構(gòu)造方法。其可以包括【new,none,scripted,spring,jsf,struts,pageflow,ejb3】關(guān)于creator的具體用法,可以參照http://getahead.org/dwr/server/dwrxml/creators。
          2.javascript:java類暴露給瀏覽器所調(diào)用的javascript的名稱,也就是在jsp頁(yè)面所出現(xiàn)的js的名稱一定和此處所定義的一致。
          3.param:指定create元素所需要的參數(shù),比如其允許創(chuàng)建的java類的名稱。
          4.name:param元素所指定的參數(shù)名稱。
          5.value:param元素所指定的參數(shù)值。
          后臺(tái)業(yè)務(wù)方法實(shí)現(xiàn)如下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的記錄,也即將所有的省查詢出來(lái),放入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("----獲得省的方法出現(xiàn)異常:" + 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.     // 根據(jù)parentid獲得其下所對(duì)應(yīng)的記錄   
          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("----根據(jù)父id獲得子記錄的方法出現(xiàn)異常:" + 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 譚明 閱讀(613) 評(píng)論(0)  編輯  收藏 所屬分類: AJAX
          主站蜘蛛池模板: 南郑县| 蒙山县| 息烽县| 池州市| 军事| 高碑店市| 磐石市| 长乐市| 定南县| 吉安县| 砀山县| 黔南| 大新县| 岳阳县| 清原| 红桥区| 象州县| 东港市| 新巴尔虎左旗| 鲁甸县| 大悟县| 蓝田县| 河南省| 巴彦淖尔市| 乌海市| 郓城县| 巴楚县| 宁河县| 曲周县| 鹤岗市| 通化县| 昌图县| 奈曼旗| 宝清县| 建湖县| 吉林省| 赤峰市| 凯里市| 潢川县| 江西省| 民权县|