`
rfheh
  • 浏览: 14332 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Ajax+struts实现级联菜单~学习笔记

阅读更多
1,数据库表

sheng(省份):id, uname; shi(市):id,uname,shengId;   xian(县):id,uname,xianId;

2,新建项目:menuDemo,并添加struts和hibernate引用。

3,创建各个表的dao层方法,返回为List集合,该部分省略。

4,创建MenuAction,继承DispatchAction;

package web.action;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

import dao.ShengDao;
import dao.ShiDao;
import dao.XianDao;
import entity.Shi;
import entity.Xian;

public class MenuAction extends DispatchAction {


public ActionForward searchCity(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response)
    throws Exception {
   int id = Integer.parseInt(request.getParameter("id"));
   System.out.println(id);
   String searchType = request.getParameter("searchType");
//必须有这句话,负责页面不能解析xml文件
   StringBuffer responseXML = new StringBuffer("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
  
    responseXML.append("<domains>");
   if(searchType.equals("shi")){
    ShiDao shiDao = new ShiDao();
    List list = shiDao.getShi(id);
    Iterator it = list.iterator();
    while(it.hasNext()){
     Shi shi = (Shi)it.next();
     responseXML.append("<domain");
     responseXML.append(" id='" + shi.getId());
     responseXML.append("'>");
     responseXML.append(shi.getUname());
     responseXML.append("</domain>");

    }
   }
   if(searchType.equals("xian")){
    XianDao xianDao = new XianDao();
    List list = xianDao.getXian(id);
    Iterator it = list.iterator();
    while(it.hasNext()){
     Xian xian = (Xian)it.next();
     responseXML.append("<domain");
     responseXML.append(" id='" + xian.getId());
     responseXML.append("'>");
     responseXML.append(xian.getUname());
     responseXML.append("</domain>");
    }
   }
   responseXML.append("</domains>");

   response.setContentType("text/xml; charset=UTF-8");
   response.setHeader("Cache-Control", "no-cache");

   try {
   PrintWriter out = (PrintWriter) response.getWriter();
    out.write(responseXML.toString());

    System.out.println(responseXML.toString());
    // out.flush();
   } catch (IOException e) {
    // do nothing
    e.printStackTrace();
   }
//返回空值,忽略struts-config.xml配置中的结果页
  return null;

}
public ActionForward showSheng(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response)
    throws Exception {
   ShengDao shengDao = new ShengDao();
   List list = shengDao.getSheng();
   System.out.println(list.size());
   request.setAttribute("shengs", list);
   return mapping.findForward("showSheng");
}
}

1,struts-config.xml文件配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>
<data-sources />
<form-beans>
<form-bean name="shengForm" type="web.form.ShengForm"></form-bean>
</form-beans>
<global-exceptions />
<global-forwards />
<action-mappings>
<action path="/searchCity" type="web.action.MenuAction" scope="request" parameter="doType"></action>
<action path="/showSheng" type="web.action.MenuAction" scope="request" parameter="doType">
   <forward name="showSheng" path="/index.jsp"></forward>
</action>
</action-mappings>
<message-resources parameter="web.ApplicationResources" />
</struts-config>


2,html代码如下:

<body>
    <form action="addPersonal.do" method="post">
  
   省:<select id="sheng" name="sheng" onchange="srarchCity('sheng')">     <%
     List list = (List)request.getAttribute("shengs");
                for(int i=0; i < list.size(); i++){
                Sheng sheng =(Sheng)list.get(i);
                %>
                   <option value="<%=sheng.getId() %>"><%=sheng.getUname() %></option>
                <%
                }
     %>
    </select><br>
    市:<select id="shi" name="shi" onchange="srarchCity('shi')"></select><br>
    县:<select id="xian" name="xian"></select>
</form>

</body>


1,html页面的javascript代码如下:

<script type="text/javascript">
var xmlHttpRequest;
var type;
function createXmlHttpRequest(){
   if(window.ActiveXObject){
    return new ActiveXObject("Microsoft.XMLHTTP");
   }else if(window.XMLHttpRequest){
    return new XMLHttpRequest();
   }
}
function srarchCity(obj){
   var id;
   type = obj;
   var url;
   if(obj=="sheng"){
    id=document.getElementById("sheng").value;
    url = "searchCity.do?doType=searchCity&searchType=shi&id="+id;
   }
   if(obj=="shi"){
    id=document.getElementById("shi").value;
    url = "searchCity.do?doType=searchCity&searchType=xian&id="+id;
   }
  
   xmlHttpRequest = createXmlHttpRequest();
   xmlHttpRequest.onreadystatechange = xianshipass;
   xmlHttpRequest.open("GET",url,true);
   xmlHttpRequest.send(null);
}
function xianshipass(){
   if(xmlHttpRequest.readyState==4 && xmlHttpRequest.status == 200){
    updateMenu();
   }
}
function updateMenu(){
   var select;
   if(type=="sheng"){
    select = document.getElementById("shi");
   }
   if(type=="shi"){
    select = document.getElementById("xian");
   }
   select.options.length=0;
     var options = xmlHttpRequest.responseXML.getElementsByTagName("domain");
    alert(options.length);
      var option;
       for (var i = 0, n = options.length; i < n; i++) {
      select.appendChild(createElementWithValue(options[i]));
       }
    
}
function createElementWithValue(text) {
             var element = document.createElement("option");
             element.setAttribute("value", text.getAttribute("id"));
             var text = document.createTextNode(text.firstChild.nodeValue);
             element.appendChild(text);
             return element;
   }
</script>


关于select添加<option>元素时,出现[Exception... "Not enough arguments [nsIDOMHTMLSelectElement.add]" nsresult: "0x80570001 (NS_ERROR_XPC_NOT_ENOUGH_ARGS)" lo错误
opt=document.createElement("OPTION");
            opt.value=subArray[1];
            opt.text=subArray[2];
            document.getElementByIdx("xxx").add(opt);

这样写不符合w3c标准。
所以
document.getElementByIdx("xxx").options.add(opt);
这样写,就正常了。
分享到:
评论

相关推荐

    Ajax+struts+hibernate实现级联菜单

    Ajax+struts+hibernate实现级联菜单 Ajax+struts+hibernate实现级联菜单 Ajax+struts+hibernate实现级联菜单

    ajax+struts2.0+jsp下拉列表级联

    在这个“ajax+struts2.0+jsp下拉列表级联”的示例中,我们将探讨如何利用这三个技术实现这种功能。 首先,AJAX(Asynchronous JavaScript and XML)是一种在不刷新整个页面的情况下与服务器交换数据并更新部分网页...

    jQuery+ajax实现三级级联

    在这个“jQuery+ajax实现三级级联”的实例中,我们主要探讨如何利用这两种技术来创建一个能够逐级联动的下拉菜单系统,这在数据筛选和表单填写中十分常见,如地区选择、部门分类等场景。 首先,jQuery是一个轻量级...

    Ajax 实现级联菜单

    本项目"Ajax实现级联菜单"提供了完整的源码,对于学习和理解Ajax在实际项目中的应用非常有价值。通过阅读和分析代码,你可以深入了解如何结合JavaScript、DOM操作和服务器通信来实现这种常见的前端功能。

    struts+hibernate+ajax级联菜单

    本项目"struts+hibernate+ajax级联菜单"结合了这三者,旨在实现一种交互性更强的前端菜单功能。 首先,Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它主要用于控制应用程序的流程,处理...

    运用ajax+jsp+servlet实现三级级联菜单

    在这个案例中,我们探讨如何运用AJAX、JSP和Servlet技术来实现一个三级级联菜单。 **AJAX (Asynchronous JavaScript and XML)** 是一种在不刷新整个网页的情况下,与服务器交换数据并更新部分网页的技术。它通过...

    用AJAX实现的级联菜单

    在网页设计中,级联菜单(Cascading Menu)是一种常见的交互元素,它允许用户通过层级结构来选择或浏览选项。...通过学习和分析这些代码,我们可以加深对AJAX级联菜单实现的理解,并将其应用到自己的项目中。

    JSP+AJAX+MYSQL实现二级级联菜单

    在IT领域,构建动态、交互性强的Web应用是常见的需求,而"JSP+AJAX+MYSQL实现二级级联菜单"就是一个典型的实例。这个技术组合主要用于创建能够实时更新且具有前后端交互功能的Web界面,使得用户在选择一级菜单时,...

    ajax+jQuery+ssh+oracle级联实例

    在IT行业中,构建高效、动态的Web应用是关键任务之一,而"ajax+jQuery+ssh+oracle级联实例"提供了一个具体的实现方案。这个实例涵盖了前端到后端的关键技术,包括异步数据交互(Ajax)、JavaScript库(jQuery)、...

    ajax+ssh实现省份城市级联查询

    在此,我们将深入探讨Ajax、Spring、Hibernate和Struts2这四个关键技术以及它们在实现级联查询中的作用。 Ajax(Asynchronous JavaScript and XML)是一种在不刷新整个页面的情况下与服务器交换数据并更新部分网页...

    javascript+json实现级联查询

    利用javascript+json实现级联查询

    jquery+ajax+jsp+servlet实现二级级联菜单

    ### 使用jQuery、Ajax、JSP与Servlet实现二级级联菜单 #### 一、项目背景与技术栈概述 本文档将详细介绍如何使用jQuery、Ajax、JSP与Servlet来实现一个简单的二级级联菜单功能。该功能常见于许多Web应用程序中,如...

    精通Java Web整合开发(Jsp+Ajax+Struts+Hibernate)(第2版).part1

    综上所述,《精通Java Web整合开发(Jsp+Ajax+Struts+Hibernate)(第2版)》这本书主要介绍了如何使用JSP、Ajax、Struts、Hibernate以及Spring等技术进行Web应用的开发,涵盖了这些技术的基本概念、核心功能及实际应用...

    struts2 级联菜单

    在Struts2中实现级联菜单是一项常见的需求,通常用于构建复杂的下拉选择框,使得用户能够逐级选择相关选项。级联菜单在数据表关联或者层级结构的展示中非常实用,例如地区选择、部门分类等。 首先,我们需要理解...

    AJAX+ASP多级无限制级联菜单(地市版).

    "AJAX+ASP多级无限制级联菜单(地市版)"就是一个利用AJAX(异步JavaScript和XML)技术和ASP(Active Server Pages)编程实现的多级菜单系统,特别适用于地理级别的无限级联选择。 首先,我们需要理解AJAX的核心...

    jsp实现级联菜单 jsp实现级联菜单

    ### JSP实现级联菜单详解 #### 一、概述 级联菜单是Web应用程序中常见的一种交互设计方式,尤其在需要展示多层级数据结构时,如省份-城市选择器等场景下非常实用。通过级联菜单,用户可以方便地根据上一级的选择来...

    JavaDB+JSP+AJAX级联下拉菜单

    JavaDB+JSP+AJAX实现的级联下拉菜单.htm

    php中ajax+xml的级联

    本教程将深入探讨如何在PHP环境中实现AJAX与XML的级联应用。 首先,让我们理解AJAX的基本概念。AJAX允许在不刷新整个页面的情况下与服务器进行异步通信,这为用户提供了更加流畅的浏览体验。它通过JavaScript创建...

    级联菜单 级联菜单级联菜单级联菜单

    级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单...

Global site tag (gtag.js) - Google Analytics