本例子是由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里面需要配置如下:
代碼
- <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>
- </servlet>
- <servlet-mapping>
- <servlet-name>dwr-invoker</servlet-name>
- <url-pattern>/dwr/*</url-pattern>
- </servlet-mapping>
然后在web.xml的同目錄下,創(chuàng)建一個(gè)dwr.xml,配置如下:
代碼
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 0.4//EN" "http://www.getahead.ltd.uk/dwr/dwr.dtd">
- <dwr>
- <allow>
- <create creator="new" javascript="province">
- <param name="class" value="com.xinli.struts.service.ProvinceService"/>
- </create>
- </allow>
- </dwr>
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:
代碼
- package com.xinli.struts.dao;
- import java.sql.Connection;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- import java.util.HashMap;
- import java.util.Map;
- import com.xinli.struts.db.DBManager;
- /**
- * @author fuhao
- */
- public class ProvinceDAO {
- private static Connection conn = null;
- private static Statement stmt = null;
- private static ResultSet rs = null;
- // 全取所有的parentid=0的記錄,也即將所有的省查詢出來(lái),放入Map中
- public Map getFirst() throws SQLException {
- Map map = new HashMap();
- String sql = "select * from province where parentid = " + 0;
- try {
- conn = DBManager.getConnection();
- stmt = conn.createStatement();
- rs = stmt.executeQuery(sql);
- while (rs.next()) {
- map.put(rs.getInt("id"), rs.getString("name"));
- }
- return map;
- } catch (Exception e) {
- System.out.println("----獲得省的方法出現(xiàn)異常:" + e);
- e.printStackTrace();
- return null;
- } finally {
- if (rs != null && stmt != null && conn != null) {
- rs.close();
- stmt.close();
- conn.close();
- }
- }
- }
- // 根據(jù)parentid獲得其下所對(duì)應(yīng)的記錄
- public Map getChildByParentId(String id) throws SQLException {
- Map map = new HashMap();
- String sql = "select * from province as p where p.parentid =" + id;
- try {
- conn = DBManager.getConnection();
- stmt = conn.createStatement();
- rs = stmt.executeQuery(sql);
- while (rs.next()) {
- map.put(rs.getInt("id"), rs.getString("name"));
- }
- return map;
- } catch (Exception e) {
- System.out.println("----根據(jù)父id獲得子記錄的方法出現(xiàn)異常:" + e);
- e.printStackTrace();
- return null;
- } finally {
- if (rs != null && stmt != null && conn != null) {
- rs.close();
- stmt.close();
- conn.close();
- }
- }
- }
- }