现在要用Struts+JavaScript实现一个省市联动菜单,遇到了点问题,实现思想是这样的:
首先页面显示时,加载省的选项,然后选择省后,将省的值传到Action中,调用方法获取市的集合,再将市的集合赋值给FormBean,再将FormBean传到原JSP页面,从而达到动态效果,但是现在出了点问题,代码如下:
我有一XML文件:
<?xml version="1.0" encoding="GBK"?>
<china>
<province name="直辖市">
<city>北京</city>
<city>上海</city>
<city>天津</city>
<city>重庆</city>
</province>
<province name="广东">
<city>广州</city>
<city>珠海</city>
<city>深圳</city>
<city>东莞</city>
</province>
<province name="广西">
<city>桂林</city>
<city>柳州</city>
<city>北海</city>
<city>南宁</city>
</province>
<province name="海南">
<city>海口</city>
<city>三亚</city>
</province>
<province name="湖北">
<city>武汉</city>
<city>鄂州</city>
<city>荆州</city>
<city>十堰</city>
</province>
<province name="湖南">
<city>长沙</city>
<city>岳阳</city>
<city>常德</city>
<city>张家界</city>
</province>
<province name="浙江">
<city>杭州</city>
<city>绍兴</city>
<city>宁波</city>
<city>台州</city>
</province>
<province name="辽宁">
<city>沈阳</city>
<city>大连</city>
<city>抚顺</city>
<city>铁岭</city>
</province>
</china>
***************************************
然后通过JDOM解析,分别获取省市,
package com.selectdemo.tool;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
public class ReadXml {
Element root = null;
public ReadXml() throws FileNotFoundException, JDOMException, IOException {
super();
SAXBuilder sb = new SAXBuilder();//解析器对象
Document doc = sb.build(this.getClass().getResourceAsStream("/city.xml"));//绑定文件
root = doc.getRootElement();//获取根元素
}
public List getProvince(){ //获取省份
ArrayList provinceList = new ArrayList();
List tempList = root.getChildren();//获取所有省份节点
for(int i=0; i<tempList.size();i++){
Element province=(Element)tempList.get(i);//子节点转型
provinceList.add(province.getAttributeValue("name"));//获取省份节点属性内容
}
return provinceList;
}
public List getCity(String province){
ArrayList cityList = new ArrayList();
List provincetemplist = root.getChildren();//省份集合
for(int i=0; i<provincetemplist.size();i++){
Element provinceElement = (Element)provincetemplist.get(i);
if((provinceElement.getAttributeValue("name")).equals(province)){//如果属性为传进来的名称
List cityTempList = provinceElement.getChildren();//获取子节点集合
for(int j=0; j<cityTempList.size(); j++){//循环
Element cityElement = (Element)cityTempList.get(j);//当前城市节点
cityList.add(cityElement.getTextTrim());//增加城市到集合
}
}
}
return cityList;
}
}
******************************
然后JSP页面代码:
<html:html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>Insert title here</title>
<SCRIPT LANGUAGE="JavaScript">
function fungetCityes()
{
document.forms[0].action="/select.do";
document.forms[0].sumbit();
}
</SCRIPT>
</head>
<body>
<html:form action="/select.do" method="post">
<html:select property="province" onchange="fungetCityes()">
<html:option value="">请选择省份</html:option>
<html:options property="provinces" />
</html:select>
<html:select property="city">
<html:option value="">请选择城市</html:option>
<html:options property="cities" />
</html:select>
</html:form>
</body>
</html:html>
****************************
接着FormBean:
package com.selectdemo.struts.form;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import org.apache.struts.action.ActionForm;
import org.jdom.JDOMException;
import com.selectdemo.tool.ReadXml;
public class SelectForm extends ActionForm {
private String province;
private String city;
private Collection provinces;
private Collection cities = new ArrayList();
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public Collection getCities() {
try {
ReadXml readXml = new ReadXml();
cities = readXml.getCity(province);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return cities;
}
public void setCities(Collection cities) {
this.cities = cities;
}
public Collection getProvinces() {
try {
ReadXml readXml = new ReadXml();
provinces = readXml.getProvince();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return provinces;
}
public void setProvinces(Collection provinces) {
this.provinces = provinces;
}
}
*************************************************
Action:
package com.selectdemo.struts.action;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.jdom.JDOMException;
import com.selectdemo.struts.form.SelectForm;
import com.selectdemo.tool.ReadXml;
public class SelectAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
SelectForm selectForm = (SelectForm) form;
String province = selectForm.getProvince();
System.out.println(province);
try {
ReadXml readXml = new ReadXml();
List list = readXml.getCity(province);//获取城市集合
selectForm.setCities(list);//将城市集合设置给Form
request.setAttribute("selectForm", selectForm);//返回给原JSP页面
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return mapping.findForward("success");
}
}
*************************
struts-config.xml
<form-bean name="selectForm" type="com.selectdemo.struts.form.SelectForm" />
<action input="/select.jsp" name="selectForm" path="/select" scope="request"
type="com.selectdemo.struts.action.SelectAction">
<forward name="success" path="/select.jsp" />
</action>
**********************************************
<SCRIPT LANGUAGE="JavaScript">
function fungetCityes()
{
document.forms[0].action="/select.do";
document.forms[0].sumbit();
}
</SCRIPT>
感觉这里有问题,但不知道怎么写.
现在的问题是:省份能够取出,并在JSP页面正常显示,但是当我选择省份后,却左下角显示"页面错误",应该是JavaScript的问题,可是我不知道出错在哪里,请看一下,谢谢.
分享到:
相关推荐
四级联动通常指的是在一个表单中,用户选择一个选项后,下一个相关的下拉菜单会根据前一个选择更新其选项。例如,在一个地区选择的例子中,用户先选择国家,接着省市区会根据国家的选择自动更新。这种功能在地址选择...
“ajax,struts2,json实现省市区三级联动源码含全国省市区数据库”这一标题揭示了这个压缩包包含的是一项使用AJAX、Struts2和JSON技术来实现的省市区三级联动功能的源代码。这项技术常用于web应用中,允许用户在选择...
本项目通过这三大框架实现了一个级联操作,具体涉及到了省市县以及年月日的选择,这种级联下拉菜单在实际应用中常常用于地址填写或日期选择等场景。 Struts2是基于MVC设计模式的Web框架,主要负责处理用户的请求和...
2. **三级联动**:在Web应用中,三级联动通常指的是在一个下拉菜单选择某一选项时,根据所选值自动更新下一个下拉菜单的选项,以此类推,形成三个级别的联动效果。在本例中,可能是省份选择后,城市列表自动更新,...
本项目“MVC_AJAX_省市联动”是针对初学者的一个简单示例,旨在帮助理解MVC框架的工作原理,并通过AJAX技术实现省市区联动效果。 1. **MVC架构**: MVC是一种将业务逻辑、数据和用户界面分离的设计模式。Model代表...
2. JavaScript:使用原生JavaScript或者库(如jQuery)监听第一个下拉菜单的`change`事件。当用户选择省份时,触发AJAX请求,获取对应的市级数据,然后填充到市的下拉菜单。同理,选择市后获取县(区)数据,填充到...
省市二级联动通常是指在一个下拉菜单选择省份后,另一个下拉菜单会动态加载对应的市一级的数据。这种功能在很多网站的地址填写环节中常见,它可以提高用户界面的交互性和用户体验。下面将详细介绍如何在SSH框架下...
- 这个文件名暗示了它可能是一个关于如何在Struts中处理数据库操作和生成JSON的代码示例,包括Action类的定义、DAO(数据访问对象)层的实现以及SQL查询的封装。 综上所述,这个项目展示了如何结合JSON、Struts和...
在本文中,我们将深入探讨如何实现一个基于AJAX的省市区三级联动下拉菜单,以Java后端技术作为支持。这种功能通常用于网页表单中,允许用户在选择省份后,城市和区县的下拉菜单会根据所选的省份自动更新。下面将详细...
首先,SSH(Struts2 + Spring + Hibernate)是一个经典的Java Web开发框架组合。Struts2负责处理HTTP请求和视图展示,Spring提供依赖注入和事务管理,Hibernate则作为ORM(对象关系映射)工具,帮助开发者更方便地...
在IT行业中,尤其是在Web开发领域,省市县三级级联是一个常见的需求,主要用于用户选择地址时提供方便的下拉菜单选择。这种功能可以提高用户体验,减少输入错误。在本项目中,开发者利用了Hibernate这一强大的对象...
标题中的“地区联拉选择标签”指的是在网页或者应用程序中常用的一种交互元素,它用于让用户在选择省份后,根据所选省份动态加载对应的市区选项,形成一个两级联动的选择效果。这种功能常见于需要用户填写详细地址的...