您当前的位置: 首页 > 网站编程 > JSP教程 > JSP+AJAX三级级联及更多级的实现

JSP+AJAX三级级联及更多级的实现

作者:guanchaofeng 来源:本站整理 发布时间: 2009-06-21 22:58 点击:
使用网上的一个例子,结合自已的实践,还没有做出来,先放在这里,慢慢的改进~~原来网页的链接没看到了~~ 第一个页面:menu.jsp %@pagelanguage=javaimport=java.util.*,java.sql.*pageEncoding=UTF-8% % request.setCharacterEncoding(UTF-8); response.set

JSP+AJAX三级级联及更多级的实现

  使用网上的一个例子,结合自已的实践,还没有做出来,先放在这里,慢慢的改进~~原来网页的链接没看到了~~
  
  第一个页面:menu.jsp
  
  <%@pagelanguage="java"import="java.util.*,java.sql.*"pageEncoding="UTF-8"%>
  
  <%
  
  request.setCharacterEncoding("UTF-8");
  
  response.setContentType("text/html;charset=UTF-8");
  
  %>
  
  <html>
  
  <head>
  
  <METAhttp-equiv=Content-Typecontent="text/html;charset=UTF-8">
  
  <!--LINKhref="images/css.css"type=text/cssrel=stylesheet-->
  
  <title>级联菜单</title>
  
  </head>
  
  <%
  
  //连接到数据库,并且得到一个List,作为第一个select控件的数据源
  
  StringCLASSNANE="com.microsoft.jdbc.sqlserver.SQLServerDriver";
  
  StringURL="jdbc:microsoft:sqlserver://localhost:1433;databasename=数据库名";
  
  StringUSER="sa";
  
  StringPASSWORD="";
  
  Connectionconn=null;
  
  Statementst=null;
  
  ResultSetrs=null;
  
  Listcollege=newArrayList();
  
  try{
  
  Class.forName(CLASSNANE);
  
  }catch(java.lang.ClassNotFoundExceptione){
  
  e.printStackTrace();
  
  }
  
  try{
  
  conn=DriverManager.getConnection(URL,USER,PASSWORD);
  
  st=conn.createStatement();
  
  Stringsql="selectsnamefrom表名";
  
  rs=st.executeQuery(sql);
  
  while(rs.next())
  
  {
  
  college.add(rs.getString(1));
  
  }
  
  rs.close();
  
  st.close();
  
  conn.close();
  
  }catch(Exceptione){
  
  e.printStackTrace();
  
  }
  
  %>
  
  <body>
  
  <scriptlanguage="javascript">
  
  varXMLHttpReq;//这个例子里面只用到一个XMLHttpRequest对象,用于获取服务端返回的XML序列
  
  //创建XMLHttpRequest对象
  
  functioncreateXMLHttpRequest(){
  
  if(window.XMLHttpRequest){//Mozilla浏览器
  
  XMLHttpReq=newXMLHttpRequest();
  
  }
  
  elseif(window.ActiveXObject){//IE浏览器
  
  try{
  
  XMLHttpReq=newActiveXObject("Msxml2.XMLHTTP");
  
  }catch(e){
  
  try{
  
  XMLHttpReq=newActiveXObject("Microsoft.XMLHTTP");
  
  }catch(e){}
  
  }
  
  }
  
  }
  
  //发送请求函数
  
  functionsendRequest1(url){
  
  createXMLHttpRequest();
  
  XMLHttpReq.open("GET",url,true);
  
  XMLHttpReq.onreadystatechange=processResponse1;//指定响应函数
  
  XMLHttpReq.send(null);//发送请求
  
  }
  
  //处理返回信息函数
  
  functionprocessResponse1(){
  
  if(XMLHttpReq.readyState==4){//判断对象状态
  
  if(XMLHttpReq.status==200){//信息已经成功返回,开始处理信息
  
  updateList1();
  
  }else{//页面不正常
  
  alert("您所请求的页面有异常。");
  
  }
  
  }
  
  }
  
  //更新菜单函数
  
  functionupdateList1(){
  
  varcountry=XMLHttpReq.responseXML.getElementsByTagName("major");
  
  varlist=document.all.list1;
  
  for(vari=0;i<country.length;i++){
  
  list.add(newOption(country[i].firstChild.data,country[i].firstChild.data));
  
  }
  
  }
  
  //发送请求函数
  
  functionsendRequest2(url){
  
  createXMLHttpRequest();
  
  XMLHttpReq.open("GET",url,true);
  
  XMLHttpReq.onreadystatechange=processResponse2;//指定响应函数
  
  XMLHttpReq.send(null);//发送请求
  
  }
  
  //处理返回信息函数
  
  functionprocessResponse2(){
  
  if(XMLHttpReq.readyState==4){//判断对象状态
  
  if(XMLHttpReq.status==200){//信息已经成功返回,开始处理信息
  
  updateList2();
  
  }else{//页面不正常
  
  alert("您所请求的页面有异常。");
  
  }
  
  }
  
  }
  
  functionupdateList2(){
  
  varcity=XMLHttpReq.responseXML.getElementsByTagName("classname");
  
  varlist=document.all.list2;
  
  for(vari=0;i<city.length;i++){
  
  list.add(newOption(city[i].firstChild.data,city[i].firstChild.data));
  
  }
  
  }
  
  //创建级联菜单函数
  
  functionshowList1(obj){
  
  clearList1();
  
  clearList2();
  
  sendRequest1("menujsp.jsp?college="+obj);
  
  }
  
  functionshowList2(obj){
  
  clearList2();
  
  sendRequest2("menujsp.jsp?classname="+obj);
  
  }
  
  functionclearList1()
  
  {
  
  varlist=document.all.list1;
  
  list.options.length=0;
  
  list.add(newOption("---请选择---",""));
  
  }
  
  functionclearList2()
  
  {
  
  varlist=document.all.list2;
  
  list.options.length=0;
  
  list.add(newOption("---请选择---",""));
  
  }
  
  </script>
  
  <selectonchange="showList1(this.options[this.options.selectedIndex].value)"name="collegeselect"style="width:150px">
  
  <optionvalue=''>---请选择---</option>
  
  <%
  
  for(inti=0;i<college.size();i++)
  
  {
  
  out.println("<optionvalue='"+college.get(i)+"'>"+college.get(i)+"</option>");
  
  }
  
  %>
  
  </select>
  
  <selectname="list1"onchange="showList2(this.options[this.options.selectedIndex].value)"style="width:150px">
  
  <optionname="">---请选择---</option>
  
  </select>
  
  <selectname="list2"onchange="if(this.selectedIndex)alert(this.options[this.options.selectedIndex].value)"style="width:150px">
  
  <optionname="">---请选择---</option>
  
  </select>
  
  </body>
  
  </html>
  
  第二个页面,用来接受请求:
  
  menujsp.jsp
  
  <%@pagecontentType="text/html;charset=UTF-8"import="java.util.*,java.sql.*"%>
  
  <%
  
  Stringcollege=request.getParameter("college");
  
  Stringclassname=request.getParameter("classname");
  
  college=newString(college.getBytes("ISO-8859-1"),"GBK");
  
  System.out.println("学院"+college);
  
  StringCLASSNANE="com.microsoft.jdbc.sqlserver.SQLServerDriver";
  
  StringURL="jdbc:microsoft:sqlserver://localhost:1433;databasename=数据库名";
  
  StringUSER="sa";
  
  StringPASSWORD="";
  
  Connectionconn=null;
  
  Statementst=null;
  
  ResultSetrs=null;
  
  Listmajor=newArrayList();
  
  Listclasses=newArrayList();
  
  try{
  
  Class.forName(CLASSNANE);
  
  }catch(java.lang.ClassNotFoundExceptione){
  
  e.printStackTrace();
  
  }
  
  try{
  
  conn=DriverManager.getConnection(URL,USER,PASSWORD);
  
  st=conn.createStatement();
  
  if(college!=null)
  
  {
  
  Stringsql="selectmnamefromtb_majorminnerjoin(select*fromtb_schoolwheresname='"
  
  +college+"')"+"eonm.msid=e.sid";
  
  System.out.println(sql);
  
  rs=st.executeQuery(sql);
  
  while(rs.next())
  
  {
  
  major.add(rs.getString(1));
  
  }
  
  }
  
  if(classname!=null)
  
  {
  
  //这里做的是一个内联接查询
  
  Stringsql2="selectmnamefromtb_majorminnerjoin(select*fromtb_schoolwheresname='"
  
  +classname+"')"+"eonm.msid=e.sid";
  
  System.out.println(sql2);
  
  rs=st.executeQuery(sql2);
  
  while(rs.next())
  
  {
  
  classes.add(rs.getString(1));
  
  }
  
  }
  
  rs.close();
  
  st.close();
  
  conn.close();
  
  }catch(Exceptione){
  
  e.printStackTrace();
  
  }
  
  response.setContentType("text/xml;charset=UTF-8");
  
  response.setHeader("Cache-Control","no-cache");
  
  out.println("<response>");
  
  for(inti=0;i<major.size();i++)
  
  {
  
  out.println("<major>"+major.get(i).toString()+"</major>");
  
  }
  
  for(inti=0;i<classes.size();i++)
  
  {
  
  out.println("<classname>"+classes.get(i).toString()+"</classname>");
  
  }
  
  out.println("</response>");
  
  out.flush();
  
  %>
  
  从网上参考时遇到的问题:
  
  1.编码的问题,虽然页面上都是UTF-8,但是转过来的是GBK
  
  用上一句
  
  college=newString(college.getBytes("ISO-8859-1"),"GBK");
  
  得以解决,但因为还没看AJAX,所以还搞不清楚,先实现吧
  
  2.参数传值的问题。第一个下拉框选中之后,第二个下拉框出现内容,但是在第二个下拉框选中内容之后,
  
  参数值传不过去,是传值的问题,还是其它,,还在研究中....晕~~

分享到:
本文"JSP+AJAX三级级联及更多级的实现"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4