`

AJAX实现的省市级联操作

    博客分类:
  • ajax
阅读更多

 表现层:JSP

    <%@ page language="java" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<html>
<title></title>
<head>
<script type="text/javascript">
  //定义一个变量用于存放XMLHttpRequest对象
  var xmlHttp;
  //该函数用于创建一个XMLHttpRequest对象
  function createXMLHttpRequest(){
         if(window.ActiveXObject){
             xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
         }else if(window.XMLHttpRequest){
             xmlHttp = new XMLHttpRequest();
         }
  }
  //这 是响应省份列表onChange事件的处理方法
    function updateSelect(){
        //得到省份列表的当前选值
  var  selected = document.all.slt1.value;
 
  //创建一个XMLHttpRequest对象
  createXMLHttpRequest();
  //将状态触发器绑定到一个processor函数
  xmlHttp.onreadystatechange = processor;
  //通过GET方法向指定的URL建立服务器的调用
  xmlHttp.open("GET","/createXML.action?selected="+selected,true);
  //发送请求
  xmlHttp.send(null);
  }
  //这是一个用来处理状态改变的函数
  function processor(){
  //定义一个变量用于存放从服务器返回的响应结果
  var result;
  if(xmlHttp.readyState == 4){//如果响应完成
    if(xmlHttp.status == 200){//如果返回成功
     //取出服务器返回的XML文档的所有City标签的子节点响应内容
    var docXML = xmlHttp.responseXML;
    
     result = docXML.getElementsByTagName("city");
   // alert(result.getAttribute("city"));
   // alert(result.getElementsByTagName("city").childNodes[0].childNodes[0].nodeValue);
   // alert(result[0].childNodes[0].childNodes[0].nodeValue);
    //先清除地市列表的现有内容
    while(document.all.slt2.options.length > 0){
       document.all.slt2.removeChild(document.all.slt2.childNodes[0]);
    }
    //解析result中的数据并更新地市列表
    for(var i = 0 ; i < result.length ;i++){
      var option  = document.createElement("OPTION");
      //这是取出<cityname>标签中的值
      option.text = result[i].childNodes[0].childNodes[0].nodeValue;
      //这是取出<cityvalue>标签中的值
      option.value = result[i].childNodes[1].childNodes[0].nodeValue;
      //为地市列表添加选项
      document.all.slt2.options.add(option);
     }   
              }
  }
  }
</script>
</head>
<body>
 请选择省份:
   <select id = "slt1" onChange="updateSelect()">
  <option value="1">湖南省</option>
        <option value="2">广东省</option>
   </select>
地市:
  <select id = "slt2">
  <option value="1">请选择城市</option>
   </select>
<br>-----------<br>

</body>
</html>

 

 

 <%@ page language="java" pageEncoding="UTF-8"   contentType="xml"%>
 ${content}

控制层:

  package com.dicorp.ajax.ajax_web.actions;

 

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Properties;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
*/
/*import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import org.w3c.dom.CDATASection;
import org.w3c.dom.Comment;
import org.w3c.dom.ProcessingInstruction;
import org.w3c.dom.Text;
 */
  

import com.dicorp.ajax.ajax_web.createXMLUtils.CreateCityXMLUtil;
import com.opensymphony.webwork.ServletActionContext;
import com.opensymphony.webwork.interceptor.ServletRequestAware;
import com.opensymphony.webwork.interceptor.ServletResponseAware;
import com.opensymphony.xwork.Action;
import com.opensymphony.xwork.ActionContext;

import   javax.xml.transform.*;  
import   javax.xml.transform.dom.*;  
import   javax.xml.transform.stream.*;  
import   org.w3c.dom.*;  
import   java.io.*;  
import java.net.URI;

import   javax.xml.parsers.*;  
import   java.util.*;  

public class CreateXMLAction  implements Action ,ServletResponseAware,ServletRequestAware{
    private String selected;
    private HttpServletResponse response;
    private HttpServletRequest request;
 

 public String getSelected() {
  return selected;
 }
 public void setSelected(String selected) {
  this.selected = selected;
 }
 public String execute() throws Exception {
   ActionContext serviceContext = ActionContext.getContext();
    //  xmlPath = request.getRequestURI();
     // xmlPath = request.getServletPath();
   StringBuffer xmlPath = request.getRequestURL();
   String rPath = xmlPath.toString();
   if(rPath.lastIndexOf("/") != -1){
    int index = rPath.lastIndexOf("/");
    rPath = rPath.substring(0,index);
   }
   rPath = request.getContextPath();
   System.out.println("?????????????????"+rPath);
 
 
  //String resPath = rPath +"/ajax_web/web/xml/city.xml";
   String resPath = request.getServletPath();
      System.out.println("%%%%%%%%%%%%%%%%%%%%%%%%%%%xmlPath=     "+resPath);
 
   String selected = this.selected;
   System.out.print("&&&&&&&&&&&&&&&&&&&"+selected);
  if(selected.equals("1")){//如果选择的是湖南省
   String address = "长沙,1,娄底,2,常德,3";
   CreateCityXMLUtil.createXML(resPath,address.trim());
  }else{//如果选择的是广东省
   String address = "广州,1,深圳,2,佛山,3";
   CreateCityXMLUtil.createXML(resPath,address.trim());
  }
     return SUCCESS;
 }
 public void setServletResponse(HttpServletResponse response) {
   this.response  = response;
 }
 

 
 /*
 public void saveToXML(HttpServletResponse response, String sb) throws IOException {
  Document doc = new Document();
  Element root = new Element("response");
  doc.addContent(root);
  System.out.println("&&***&*&**&**&*&*&&&*&&*&**&*"+doc);
  Element item = null;
  item = new Element("city");
  
  item.setAttribute("cityname","广州");
  item.setAttribute("cityvalue","1");
 
  
  root.addContent(item.detach());
  
  try {
   XMLOutputter printer = new XMLOutputter(Format.getPrettyFormat().setEncoding("UTF-8"));
   response.setContentType("text/xml");
   printer.output(doc, response.getOutputStream());
  } catch (IOException e) {
              e.printStackTrace();
  }
 }*/
 public void setServletRequest(HttpServletRequest request) {
  
  this.request = request;
   }
}

package com.dicorp.ajax.ajax_web.createXMLUtils;

import java.io.File;
import java.net.URI;
import java.util.Properties;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class CreateCityXMLUtil {
 public  static void createXML(String resPath ,String address){
  try  
    {  
   String[] cityAddress = address.split(",");
 
    DocumentBuilderFactory   domFactory=DocumentBuilderFactory.newInstance();  
    DocumentBuilder   builder=domFactory.newDocumentBuilder();  
     
    Document   doc=builder.newDocument();  
    Element   response=doc.createElement("response");  
    doc.appendChild(response);  
 
  for(int i = 0 ; i < cityAddress.length;i++){
    Element   city = doc.createElement("city");
    response.appendChild(city);
    Element cityname = doc.createElement("cityname");
    cityname.appendChild(doc.createTextNode(cityAddress[i]));
    ++i;
    Element cityvalue = doc.createElement("cityvalue");
    cityvalue.appendChild(doc.createTextNode(cityAddress[i]));
    city.appendChild(cityname);
    city.appendChild(cityvalue);
  } 
    File   file=null;  
    StreamResult   res=null; 
    URI uri = new URI(resPath);
     file=new   File("D:\\MyLucy\\studyworkspace\\ajax_web\\web\\xml\\city.xml");  
   // file = new File(uri);
    res = new StreamResult(file);  
    DOMSource   ds = new  DOMSource(doc);  
    TransformerFactory  tff = TransformerFactory.newInstance();  
    Transformer   tf = tff.newTransformer();  
    Properties   props = new  Properties();  
    props.put(OutputKeys.INDENT,"yes");  
    props.put(OutputKeys.ENCODING,"utf-8");//****************  
    tf.setOutputProperties(props);//*********************  
    tf.transform(ds,res);  
    }catch(Exception   e)
    {
     e.printStackTrace();
    }  
 }
}

分享到:
评论
1 楼 Black_Sun 2010-07-23  
  

相关推荐

    ajax省市级联

    在网页开发中,"Ajax 省市级联"是一种常见的交互设计,用于实现用户选择省份时,自动加载并展示对应省份的城市列表。这种方式极大地提升了用户体验,避免了页面刷新,使得数据加载更为流畅。Ajax(Asynchronous ...

    AJAX省市级联

    以上就是AJAX省市级联的关键技术和实现细节,它利用了AJAX的异步特性和JSON数据交换,结合JavaScript和DOM操作,实现了高效、流畅的用户体验。在实际项目中,开发者还需要根据具体需求和场景进行适当的调整和优化。

    ajax实现省市级联

    **Ajax 实现省市级联** 在 Web 应用开发中,省市级联是一个常见的功能,它允许用户在选择省份后自动加载对应的市。这个过程通常使用 Ajax(Asynchronous JavaScript and XML)技术来实现,以提供更好的用户体验,...

    省市级联Ajax\省市级联Ajax\

    这个标题"省市级联Ajax"表明我们正在讨论如何利用Ajax技术来实现省级、市级和县级之间的联动下拉菜单。Ajax,全称Asynchronous JavaScript and XML,是一种在不重新加载整个网页的情况下更新部分网页内容的技术,...

    jquery实现省市级联

    本文将深入探讨如何使用 jQuery 实现省市级联。 首先,我们需要理解基本的 HTML 结构。一个简单的省市级联结构可能包含两个或三个 `&lt;select&gt;` 元素,每个元素代表一个层级(省、市、区/县)。例如: ```html ...

    javascript实现省市级联

    在实现省市级联的过程中,主要有以下几个关键知识点: 1. **DOM操作**:JavaScript通过Document Object Model(DOM)来操作HTML元素。我们需要获取或创建省市区的下拉列表,并根据用户的选择动态添加或更新城市选项...

    使用Spring实现省市级联,非常简单实用

    在Spring框架中实现省市级联(Province-City联动)是一种常见的功能需求,特别是在开发具有地域选择功能的Web应用时。省市级联允许用户先选择省份,然后根据所选省份动态加载对应的城市列表。这种功能提高了用户体验...

    省市级联列表

    8. **前端展示**:在Web应用中,省市级联列表通常会通过Ajax异步请求获取,然后在前端页面动态渲染,实现下拉框的级联选择效果。 9. **数据同步**:由于行政区划可能会有变动,所以数据库中的数据需要定期同步,这...

    超强的jquery省市级联

    综上所述,"超强的jquery省市级联"是一个集DOM操作、事件监听、Ajax异步请求、数据处理和用户体验优化于一体的前端技术实践,对于提升用户在网页上选择地址的效率和体验有着重要作用。在实际项目中,开发者可以根据...

    XML省市级联

    在实现省市级联的过程中,我们可能会用到以下知识点: 1. **XML数据结构**:首先,我们需要创建一个XML文件来存储省市区的数据。每个省份将作为一个顶级元素,城市作为子元素。例如: ```xml 杭州 宁波 ...

    js省市级联

    "省市级联"是一个常见的前端功能,主要用于实现用户在选择省份时,下拉菜单自动更新对应的城市选项,从而提供更加便捷的用户输入体验。这种功能在注册、地址填写等场景中非常常见。 在给定的"js省市级联"项目中,它...

    省市级联,包含省市级数据.rar

    10. **用户体验**:最后,省市级联的设计和实现应注重用户体验,确保选择过程流畅、无卡顿,且反馈及时。例如,可以添加搜索功能,让用户能快速找到目标区域。 以上就是关于“省市级联”应用的相关知识点,涵盖数据...

    省市级联;最新的省市区数据包

    在IT行业中,省市级联(Province-City-County Association,简称PCCA)是一种常见的地理信息组织方式,尤其在Web开发中用于实现下拉选择框的联动效果,为用户提供便捷的地区选择体验。这个数据包是专门针对中国境内...

    javascript省市级联

    总结来说,JavaScript省市级联的实现涉及到HTML的`&lt;select&gt;`和`&lt;option&gt;`元素,JavaScript事件监听、DOM操作以及可能的异步数据获取。通过这些技术,我们可以创建出动态响应用户选择的交互式表单组件,提高用户体验...

    js下拉菜单、省市级联

    接下来,我们转向省市级联的实现。在网页中,用户经常需要选择他们的所在省份和城市。为了简化这一过程,省市级联通常被用到,即用户选择一个省份后,对应的市列表会自动更新。这需要JavaScript和HTML配合工作,同时...

    jquery省市级联插件

    "jquery省市级联插件"是基于jQuery实现的一种功能组件,主要用于实现网页上的省市区级联选择效果,常见于地址填写、物流配送等场景。这种插件通过联动下拉列表的方式,使得用户在选择省份时,市和区的选项能够自动...

    模拟省市级联jsp页面模拟

    在IT行业中,省市级联...总之,省市级联的实现是Web开发中的一个重要实践,它要求开发者对JSP、JavaScript、数据库操作以及前后端交互有深入的理解。通过这种方式,我们可以为用户提供更加便捷和流畅的交互体验。

    省市级联 ssh整合实现

    这里,我们主要关注如何通过SSH(Struts、Spring、Hibernate)框架实现省市级联的功能,并结合Ajax和DWR进行异步数据交互。 **SSH整合** SSH是三个开源Java框架的组合,包括Struts作为MVC(模型-视图-控制器)框架...

Global site tag (gtag.js) - Google Analytics