很多地方需要ajax三级联动才能完成功能;我就按我的步聚来一步一步写,如果有不懂,可以Q我,我也可以发包给他. 对了,用struts 和 hibernate 容易实现
先经过一个login.jsp页面,这个页面主要是实现一次请求,来查询表,查询出三级联动的第一级
(国家--省份--市),先查出 国家,
login.jsp
<%
...
@ page contentType="text/html;charset=UTF-8"
%>
< html >
< head >
< script > ...
function loginDiv()
...{
window.location.href="index.do?action=findFinace&id=0";
}
</ script >
</ head >
< body >
< form >
< input type ="button" value ="点击进入AJAX三级联动" onclick ="loginDiv()" >< p >
</ form >
</ body >
</ html >
< html >
< head >
< script > ...
function loginDiv()
...{
window.location.href="index.do?action=findFinace&id=0";
}
</ script >
</ head >
< body >
< form >
< input type ="button" value ="点击进入AJAX三级联动" onclick ="loginDiv()" >< p >
</ form >
</ body >
</ html >
2,点击经过action ,调用find方法
/**/
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.demo;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
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.apache.struts.actions.DispatchAction;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import com.demo.pojo.Area;
import com.demo.pojo.Bbs;
import com.demo.pojo.Financing;
/** */ /**
* MyEclipse Struts
* Creation date: 11-08-2007
*
* XDoclet definition:
* @struts.action path="/login" name="loginForm" scope="request"
*/
public class IndexAction extends DispatchAction ... {
/**//*
* Generated Methods
*/
/** *//**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward query(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) ...{
response.setContentType("text/xml");
response.setHeader("Cache-Control", "no-cache");
response.setCharacterEncoding("UTF-8");
String strid=request.getParameter("id");
if(strid!=null)...{
int id=Integer.parseInt(request.getParameter("id"));
Integer idt=new Integer(id);
Session session =this.getSesion();
Transaction tx=null;
tx=session.beginTransaction();
List listProv=session.createQuery(" from Area as a where a.areaid="+idt).list();
Document doc=new Document();
Element root=new Element("roots");
/**//*for(Object o:listProv){
System.out.println("eeeeeeeeeeeeeeeeeeeeeeeee");
Element prov=new Element("provs");
prov.addContent(new Element("area").addContent(((Area)o).getArea()));
//prov.addContent(((Area)o).getArea());
root.addContent(prov);
}*/
// 锟矫碉拷锟斤拷
Iterator iter=listProv.iterator();
while(iter.hasNext())...{
Area area=(Area)iter.next();
Element prov=new Element("provs");
prov.addContent(new Element("areas").addContent(area.getArea()));
prov.addContent(new Element("id").addContent(area.getId().toString()));
root.addContent(prov);
}
doc.addContent(root);
XMLOutputter outputter=new XMLOutputter(Format.getPrettyFormat().setEncoding("UTF-8"));
try ...{
//PrintWriter wr = new PrintWriter(new BufferedWriter(new FileWriter("c:/do.txt")));
outputter.output(doc,response.getWriter());
} catch (Exception e) ...{
// TODO Auto-generated catch block
e.printStackTrace();
}
tx.commit();
}
return null;
}
public ActionForward find(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) ...{
response.setCharacterEncoding("UTF-8");
Session session =this.getSesion();
Transaction tx=null;
tx=session.beginTransaction();
List listCountry=session.createQuery(" from Area as a where areaid=0").list();
request.setAttribute("listCountry", listCountry);
tx.commit();
session.close();
return mapping.findForward("index");
}
public Session getSesion()...{
SessionFactory sessionFactory=null;
Configuration config=new Configuration().configure("hibernate.cfg.xml");
sessionFactory=config.buildSessionFactory();
Session session =sessionFactory.openSession();
return session;
}
}
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.demo;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
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.apache.struts.actions.DispatchAction;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import com.demo.pojo.Area;
import com.demo.pojo.Bbs;
import com.demo.pojo.Financing;
/** */ /**
* MyEclipse Struts
* Creation date: 11-08-2007
*
* XDoclet definition:
* @struts.action path="/login" name="loginForm" scope="request"
*/
public class IndexAction extends DispatchAction ... {
/**//*
* Generated Methods
*/
/** *//**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward query(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) ...{
response.setContentType("text/xml");
response.setHeader("Cache-Control", "no-cache");
response.setCharacterEncoding("UTF-8");
String strid=request.getParameter("id");
if(strid!=null)...{
int id=Integer.parseInt(request.getParameter("id"));
Integer idt=new Integer(id);
Session session =this.getSesion();
Transaction tx=null;
tx=session.beginTransaction();
List listProv=session.createQuery(" from Area as a where a.areaid="+idt).list();
Document doc=new Document();
Element root=new Element("roots");
/**//*for(Object o:listProv){
System.out.println("eeeeeeeeeeeeeeeeeeeeeeeee");
Element prov=new Element("provs");
prov.addContent(new Element("area").addContent(((Area)o).getArea()));
//prov.addContent(((Area)o).getArea());
root.addContent(prov);
}*/
// 锟矫碉拷锟斤拷
Iterator iter=listProv.iterator();
while(iter.hasNext())...{
Area area=(Area)iter.next();
Element prov=new Element("provs");
prov.addContent(new Element("areas").addContent(area.getArea()));
prov.addContent(new Element("id").addContent(area.getId().toString()));
root.addContent(prov);
}
doc.addContent(root);
XMLOutputter outputter=new XMLOutputter(Format.getPrettyFormat().setEncoding("UTF-8"));
try ...{
//PrintWriter wr = new PrintWriter(new BufferedWriter(new FileWriter("c:/do.txt")));
outputter.output(doc,response.getWriter());
} catch (Exception e) ...{
// TODO Auto-generated catch block
e.printStackTrace();
}
tx.commit();
}
return null;
}
public ActionForward find(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) ...{
response.setCharacterEncoding("UTF-8");
Session session =this.getSesion();
Transaction tx=null;
tx=session.beginTransaction();
List listCountry=session.createQuery(" from Area as a where areaid=0").list();
request.setAttribute("listCountry", listCountry);
tx.commit();
session.close();
return mapping.findForward("index");
}
public Session getSesion()...{
SessionFactory sessionFactory=null;
Configuration config=new Configuration().configure("hibernate.cfg.xml");
sessionFactory=config.buildSessionFactory();
Session session =sessionFactory.openSession();
return session;
}
}
返回三级联动页面
index.jsp
<%
...
@ page contentType="text/html;charset=UTF-8"
%>
<% ... @ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<% ... @ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<% ... @ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
< html >
< head >
< title > My JSP 'index.jsp' starting page </ title >
</ head >
< script type ="text/javascript" src ="../script/calendar.js" ></ script >
< script > ...
var xmlHttp;
function cerateXMLHttpRequest()
...{
if(window.XMLHttpRequest)
...{
xmlHttp = new XMLHttpRequest();
}else if(window.ActiveXObject)
...{
try...{
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e)...{
try...{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}catch(e)...{
alert("创建异步对象失败");
}
}
}
if(!xmlHttp)
...{
alert("创建异步对象失败");
return;
}
}
//利用ajaxa+struts做三级联动
//选择国家
function selectCountry(country)
...{
if(country=="")
...{
document.f.selectProvince.options.length = 1;
document.f.selectCity.options.length = 1;
return;
}
sendSelectCountry("index.do?action=query&id="+country);
}
//ajaxa发送函数,发送国家
function sendSelectCountry(url)
...{
cerateXMLHttpRequest();
xmlHttp.open("get",url,true);
xmlHttp.onreadystatechange=processCountry;
//xmlHttp.setRequestHeader('Content-type','application/x-www-form-urlencoded');
xmlHttp.send(null);
}
//以国家来 返回省的响应函数
function processCountry()
...{
if(xmlHttp.readyState==4)
...{
if(xmlHttp.status==200)
...{
var doc=xmlHttp.responseXML;
var pro=doc.getElementsByTagName("provs");
document.f.selectProvince.options.length = 1;
document.f.selectCity.options.length = 1;
for(var i=0;i<pro.length;i++)...{
var p=pro[i];
document.f.selectProvince.add(new Option(p.childNodes[0].firstChild.data,p.childNodes[1].firstChild.data));
}
}else...{
alert("请求页面异常");
}
}
}
//选择省份
function selectProv(province)
...{
if(province=="")
...{
document.f.selectCity.options.length = 1;
return;
}
sendSelectProvince("index.do?action=query&id="+province);
}
//ajaxa发送函数,发送省份
function sendSelectProvince(url)
...{
cerateXMLHttpRequest();
xmlHttp.open("get",url,true);
xmlHttp.onreadystatechange=processProvince;
//xmlHttp.setRequestHeader('Content-type','application/x-www-form-urlencoded');
xmlHttp.send(null);
}
//以省份来 返回 市的响应函数
function processProvince()
...{
if(xmlHttp.readyState==4)
...{
if(xmlHttp.status==200)
...{
var doc=xmlHttp.responseXML;
var pro=doc.getElementsByTagName("provs");
document.f.selectCity.options.length = 1;
for(var i=0;i<pro.length;i++)...{
var p=pro[i];
document.f.selectCity.add(new Option(p.childNodes[0].firstChild.data,p.childNodes[1].firstChild.data));
}
}else...{
alert("请求页面异常");
}
}
}
</ script >
< body >
< form name ="f" >
< h3 id ="findmates" > 利用ajaxa+struts做三级联动 </ h3 >
< p >
请选择国家 < select name ="province" onchange ="selectCountry(this.value)" >
< option value ="" > --请选择-- </ option >
< logic:present name ="listCountry" >
< logic:iterate collection ="${listCountry}" id ="lis" >
< option value ="${lis.id }" > ${lis.area } </ option >
</ logic:iterate >
</ logic:present >
</ select >
请选择省份 < select name ="selectProvince" onchange ="selectProv(this.value)" >
< option value ="" > --请选择-- </ option >
</ select >
请选择市 < select name ="selectCity" >
< option value ="" > --请选择-- </ option >
</ select >
</ p >
</ form >
</ body >
</ html >
<% ... @ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<% ... @ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<% ... @ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
< html >
< head >
< title > My JSP 'index.jsp' starting page </ title >
</ head >
< script type ="text/javascript" src ="../script/calendar.js" ></ script >
< script > ...
var xmlHttp;
function cerateXMLHttpRequest()
...{
if(window.XMLHttpRequest)
...{
xmlHttp = new XMLHttpRequest();
}else if(window.ActiveXObject)
...{
try...{
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e)...{
try...{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}catch(e)...{
alert("创建异步对象失败");
}
}
}
if(!xmlHttp)
...{
alert("创建异步对象失败");
return;
}
}
//利用ajaxa+struts做三级联动
//选择国家
function selectCountry(country)
...{
if(country=="")
...{
document.f.selectProvince.options.length = 1;
document.f.selectCity.options.length = 1;
return;
}
sendSelectCountry("index.do?action=query&id="+country);
}
//ajaxa发送函数,发送国家
function sendSelectCountry(url)
...{
cerateXMLHttpRequest();
xmlHttp.open("get",url,true);
xmlHttp.onreadystatechange=processCountry;
//xmlHttp.setRequestHeader('Content-type','application/x-www-form-urlencoded');
xmlHttp.send(null);
}
//以国家来 返回省的响应函数
function processCountry()
...{
if(xmlHttp.readyState==4)
...{
if(xmlHttp.status==200)
...{
var doc=xmlHttp.responseXML;
var pro=doc.getElementsByTagName("provs");
document.f.selectProvince.options.length = 1;
document.f.selectCity.options.length = 1;
for(var i=0;i<pro.length;i++)...{
var p=pro[i];
document.f.selectProvince.add(new Option(p.childNodes[0].firstChild.data,p.childNodes[1].firstChild.data));
}
}else...{
alert("请求页面异常");
}
}
}
//选择省份
function selectProv(province)
...{
if(province=="")
...{
document.f.selectCity.options.length = 1;
return;
}
sendSelectProvince("index.do?action=query&id="+province);
}
//ajaxa发送函数,发送省份
function sendSelectProvince(url)
...{
cerateXMLHttpRequest();
xmlHttp.open("get",url,true);
xmlHttp.onreadystatechange=processProvince;
//xmlHttp.setRequestHeader('Content-type','application/x-www-form-urlencoded');
xmlHttp.send(null);
}
//以省份来 返回 市的响应函数
function processProvince()
...{
if(xmlHttp.readyState==4)
...{
if(xmlHttp.status==200)
...{
var doc=xmlHttp.responseXML;
var pro=doc.getElementsByTagName("provs");
document.f.selectCity.options.length = 1;
for(var i=0;i<pro.length;i++)...{
var p=pro[i];
document.f.selectCity.add(new Option(p.childNodes[0].firstChild.data,p.childNodes[1].firstChild.data));
}
}else...{
alert("请求页面异常");
}
}
}
</ script >
< body >
< form name ="f" >
< h3 id ="findmates" > 利用ajaxa+struts做三级联动 </ h3 >
< p >
请选择国家 < select name ="province" onchange ="selectCountry(this.value)" >
< option value ="" > --请选择-- </ option >
< logic:present name ="listCountry" >
< logic:iterate collection ="${listCountry}" id ="lis" >
< option value ="${lis.id }" > ${lis.area } </ option >
</ logic:iterate >
</ logic:present >
</ select >
请选择省份 < select name ="selectProvince" onchange ="selectProv(this.value)" >
< option value ="" > --请选择-- </ option >
</ select >
请选择市 < select name ="selectCity" >
< option value ="" > --请选择-- </ option >
</ select >
</ p >
</ form >
</ body >
</ html >
点击国家,他就会去通过ajax 调用 action里面的 query()方法
在把值给下一级
struts-config.xml和 hibernate.hibernate.cfg.xml 怎么配制 我想你们会知道怎么配制