表现层: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();
}
}
}
分享到:
相关推荐
在网页开发中,"Ajax 省市级联"是一种常见的交互设计,用于实现用户选择省份时,自动加载并展示对应省份的城市列表。这种方式极大地提升了用户体验,避免了页面刷新,使得数据加载更为流畅。Ajax(Asynchronous ...
以上就是AJAX省市级联的关键技术和实现细节,它利用了AJAX的异步特性和JSON数据交换,结合JavaScript和DOM操作,实现了高效、流畅的用户体验。在实际项目中,开发者还需要根据具体需求和场景进行适当的调整和优化。
**Ajax 实现省市级联** 在 Web 应用开发中,省市级联是一个常见的功能,它允许用户在选择省份后自动加载对应的市。这个过程通常使用 Ajax(Asynchronous JavaScript and XML)技术来实现,以提供更好的用户体验,...
这个标题"省市级联Ajax"表明我们正在讨论如何利用Ajax技术来实现省级、市级和县级之间的联动下拉菜单。Ajax,全称Asynchronous JavaScript and XML,是一种在不重新加载整个网页的情况下更新部分网页内容的技术,...
本文将深入探讨如何使用 jQuery 实现省市级联。 首先,我们需要理解基本的 HTML 结构。一个简单的省市级联结构可能包含两个或三个 `<select>` 元素,每个元素代表一个层级(省、市、区/县)。例如: ```html ...
在实现省市级联的过程中,主要有以下几个关键知识点: 1. **DOM操作**:JavaScript通过Document Object Model(DOM)来操作HTML元素。我们需要获取或创建省市区的下拉列表,并根据用户的选择动态添加或更新城市选项...
在Spring框架中实现省市级联(Province-City联动)是一种常见的功能需求,特别是在开发具有地域选择功能的Web应用时。省市级联允许用户先选择省份,然后根据所选省份动态加载对应的城市列表。这种功能提高了用户体验...
8. **前端展示**:在Web应用中,省市级联列表通常会通过Ajax异步请求获取,然后在前端页面动态渲染,实现下拉框的级联选择效果。 9. **数据同步**:由于行政区划可能会有变动,所以数据库中的数据需要定期同步,这...
综上所述,"超强的jquery省市级联"是一个集DOM操作、事件监听、Ajax异步请求、数据处理和用户体验优化于一体的前端技术实践,对于提升用户在网页上选择地址的效率和体验有着重要作用。在实际项目中,开发者可以根据...
在实现省市级联的过程中,我们可能会用到以下知识点: 1. **XML数据结构**:首先,我们需要创建一个XML文件来存储省市区的数据。每个省份将作为一个顶级元素,城市作为子元素。例如: ```xml 杭州 宁波 ...
"省市级联"是一个常见的前端功能,主要用于实现用户在选择省份时,下拉菜单自动更新对应的城市选项,从而提供更加便捷的用户输入体验。这种功能在注册、地址填写等场景中非常常见。 在给定的"js省市级联"项目中,它...
10. **用户体验**:最后,省市级联的设计和实现应注重用户体验,确保选择过程流畅、无卡顿,且反馈及时。例如,可以添加搜索功能,让用户能快速找到目标区域。 以上就是关于“省市级联”应用的相关知识点,涵盖数据...
在IT行业中,省市级联(Province-City-County Association,简称PCCA)是一种常见的地理信息组织方式,尤其在Web开发中用于实现下拉选择框的联动效果,为用户提供便捷的地区选择体验。这个数据包是专门针对中国境内...
总结来说,JavaScript省市级联的实现涉及到HTML的`<select>`和`<option>`元素,JavaScript事件监听、DOM操作以及可能的异步数据获取。通过这些技术,我们可以创建出动态响应用户选择的交互式表单组件,提高用户体验...
接下来,我们转向省市级联的实现。在网页中,用户经常需要选择他们的所在省份和城市。为了简化这一过程,省市级联通常被用到,即用户选择一个省份后,对应的市列表会自动更新。这需要JavaScript和HTML配合工作,同时...
"jquery省市级联插件"是基于jQuery实现的一种功能组件,主要用于实现网页上的省市区级联选择效果,常见于地址填写、物流配送等场景。这种插件通过联动下拉列表的方式,使得用户在选择省份时,市和区的选项能够自动...
在IT行业中,省市级联...总之,省市级联的实现是Web开发中的一个重要实践,它要求开发者对JSP、JavaScript、数据库操作以及前后端交互有深入的理解。通过这种方式,我们可以为用户提供更加便捷和流畅的交互体验。
这里,我们主要关注如何通过SSH(Struts、Spring、Hibernate)框架实现省市级联的功能,并结合Ajax和DWR进行异步数据交互。 **SSH整合** SSH是三个开源Java框架的组合,包括Struts作为MVC(模型-视图-控制器)框架...