`
zhanghaidang
  • 浏览: 39342 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

一个关于Struts+JavaScript省市联动菜单的问题

阅读更多
现在要用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的问题,可是我不知道出错在哪里,请看一下,谢谢.
分享到:
评论
11 楼 neitnaco 2007-06-21  
各位们,你们检查一下是不是那位仁兄把submit给写错了哦。不过改正过来之后本页面的提交会刷新页面的。那样也还是不可以实现省市联动哦。希望加油啊。
10 楼 neitnaco 2007-06-21  
大侠!你是不是把submit写错了哦!嘿嘿!但是你那个估计得用框架实现哦。因为你提交到action中的话它会提交的。提交之后本页面是不会在保存你前面那个下拉列表中的数据的。
9 楼 neitnaco 2007-06-15  
我对Struts+JavaScript省市联动菜单很有兴趣的。但是我没有org.jdom包。请问哪位有org.jdom包啊?有的话请作为附件发到我的邮箱里。myc-olympic@163.com。谢谢!~
8 楼 whistler 2007-06-14  
用document.forms[0].action=""; 没问题,我得意思是指定的路径“/select.do”是不是不对啊,我是写的完整路径"<%=request.getContextPath()%>/select.do"
7 楼 zhanghaidang 2007-06-14  
去掉了这句,还是出错啊.
6 楼 zhanghaidang 2007-06-14  
那是不要这一句话吗?如果加这一句话,是不是应该
document.forms[0].action="/别的路径";
5 楼 whistler 2007-06-14  
当前表单的提交路径有问题吧
4 楼 zhanghaidang 2007-06-14  

onchange()会触发JavaScript方法,
document.forms[0].action="/select.do"; 当前表单的提交路径,
document.forms[0].sumbit(); 提交

此时应该会传到Action,可是我这边怎么也到不了Action
3 楼 zhanghaidang 2007-06-14  
在学校IE6.0,状态栏左边会出现一个黄色的感叹号,然后什么页面错误,在家IE7.0,什么都没有了,就是出不了结果,城市出不来.

Struts能用JavaScript用Array数组实现的省市联动菜单吗?
2 楼 anweixiao 2007-06-14  
可参考鄙人的一个仿javaeye博客中“同时加入到论坛”操作的那个级联选择框效果
http://anweixiao.iteye.com/blog/88172
至于你的那个实现,还是放弃的好………
1 楼 basicbest 2007-06-14  
兄弟,“页面错误”里面是怎么说的?IE版本是?
可不可以把页面的运行结果HTML代码贴出?

相关推荐

    struts2+ajax+json四级联动

    四级联动通常指的是在一个表单中,用户选择一个选项后,下一个相关的下拉菜单会根据前一个选择更新其选项。例如,在一个地区选择的例子中,用户先选择国家,接着省市区会根据国家的选择自动更新。这种功能在地址选择...

    ajax,struts2,json实现省市区三级联动源码含全国省市区数据库

    “ajax,struts2,json实现省市区三级联动源码含全国省市区数据库”这一标题揭示了这个压缩包包含的是一项使用AJAX、Struts2和JSON技术来实现的省市区三级联动功能的源代码。这项技术常用于web应用中,允许用户在选择...

    用Struts2+Spring+Hibernate三大框架完成的级联操作

    本项目通过这三大框架实现了一个级联操作,具体涉及到了省市县以及年月日的选择,这种级联下拉菜单在实际应用中常常用于地址填写或日期选择等场景。 Struts2是基于MVC设计模式的Web框架,主要负责处理用户的请求和...

    dwr 省市县 三级联动 struts 实例

    2. **三级联动**:在Web应用中,三级联动通常指的是在一个下拉菜单选择某一选项时,根据所选值自动更新下一个下拉菜单的选项,以此类推,形成三个级别的联动效果。在本例中,可能是省份选择后,城市列表自动更新,...

    MVC_AJAX_省市联动

    本项目“MVC_AJAX_省市联动”是针对初学者的一个简单示例,旨在帮助理解MVC框架的工作原理,并通过AJAX技术实现省市区联动效果。 1. **MVC架构**: MVC是一种将业务逻辑、数据和用户界面分离的设计模式。Model代表...

    省市县三级联动

    2. JavaScript:使用原生JavaScript或者库(如jQuery)监听第一个下拉菜单的`change`事件。当用户选择省份时,触发AJAX请求,获取对应的市级数据,然后填充到市的下拉菜单。同理,选择市后获取县(区)数据,填充到...

    ssh+dwr2实现省市二级联动

    省市二级联动通常是指在一个下拉菜单选择省份后,另一个下拉菜单会动态加载对应的市一级的数据。这种功能在很多网站的地址填写环节中常见,它可以提高用户界面的交互性和用户体验。下面将详细介绍如何在SSH框架下...

    json实现三级联动下拉框---struts版(数据来自mysql数据库)

    - 这个文件名暗示了它可能是一个关于如何在Struts中处理数据库操作和生成JSON的代码示例,包括Action类的定义、DAO(数据访问对象)层的实现以及SQL查询的封装。 综上所述,这个项目展示了如何结合JSON、Struts和...

    AJAX省市区三级联动下拉菜单(java版)

    在本文中,我们将深入探讨如何实现一个基于AJAX的省市区三级联动下拉菜单,以Java后端技术作为支持。这种功能通常用于网页表单中,允许用户在选择省份后,城市和区县的下拉菜单会根据所选的省份自动更新。下面将详细...

    仿google搜索提示效果和二级联动

    首先,SSH(Struts2 + Spring + Hibernate)是一个经典的Java Web开发框架组合。Struts2负责处理HTTP请求和视图展示,Spring提供依赖注入和事务管理,Hibernate则作为ORM(对象关系映射)工具,帮助开发者更方便地...

    用hibernate做的省市县三级级联,

    在IT行业中,尤其是在Web开发领域,省市县三级级联是一个常见的需求,主要用于用户选择地址时提供方便的下拉菜单选择。这种功能可以提高用户体验,减少输入错误。在本项目中,开发者利用了Hibernate这一强大的对象...

    地区联拉选择标签

    标题中的“地区联拉选择标签”指的是在网页或者应用程序中常用的一种交互元素,它用于让用户在选择省份后,根据所选省份动态加载对应的市区选项,形成一个两级联动的选择效果。这种功能常见于需要用户填写详细地址的...

Global site tag (gtag.js) - Google Analytics