研究了一天的在hibernate中关于servlet+Ajax+jquery+json+gson实现从数据库中读取数据实现区县、街道级联效果。
servlet的处理页面
package com.accp.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONArray;
import net.sf.json.JsonConfig;
import net.sf.json.util.PropertyFilter;
import com.accp.dao.impl.StreetDaoImpl;
import com.accp.po.Street;
import com.google.gson.Gson;
public class GetjdServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
//获得Ajax传过来的区县编号。
int qxid = Integer.parseInt(request.getParameter("qxid"));
StreetDaoImpl sdi = new StreetDaoImpl();
//根据区县编号查询所有街道
List<Street> streets = sdi.getStreetByAreaid(qxid);
request.setAttribute("streets", streets);
response.setContentType("text/xml;charset=utf-8");
PrintWriter out=response.getWriter();
//使用json
JsonConfig jc=new JsonConfig();
//用于将json保持的数据转换成字符串
Gson gson=new Gson();
//过滤掉不想要的属性,避免json死循环
jc.setJsonPropertyFilter(new PropertyFilter() {
public boolean apply(Object arg0, String arg1, Object arg2) {
// TODO Auto-generated method stub
if (arg1.equals("area")||arg1.equals("manages")) {
return true;
}else{
return false;
}
}
});
//如果有关联属性,需取消延迟加载将映射文件内的lazy设置成false
JSONArray jsonArray = JSONArray.fromObject(streets,jc);
//将json保存的数据转换成字符串
String js=gson.toJson(jsonArray);
out.print(js);
out.flush();
out.close();
}
}
jsp页面,当执行selectjd方法时进行Ajax验证
function selectjd(){
//获取name为mf的标签下的name为qxid的标签的值
var row = document.mf.qxid.value;//alert(row);
$.ajax({
type:"post",
url:"../getjd",
data:"qxid="+row,
dataType:"json",
success:function(data){
$("#jdid").empty();
$("#jdid").append("<option value='0'>不限--</option>");
$.each(data,function(streetIndex,street){
$("#jdid").append("<option value="+street["id"]+">"+street["name"]+"</option>");
});
}
});
}
还有就是为什么我使用下面的$.getJSON方式就没办法转到servlet处理页面
$.getJSON(
"../getjd?qxid="+row,
function(data){
$("#jdid").empty();
$("#jdid").append("<option value='0'>不限--</option>");
$.each(data,function(streetIndex,street){
$("#jdid").append("<option value="+street["id"]+">"+street["name"]+"</option>");
});
}
);
});