囉嗦:我作這個用了好久,用了2周,難點沒破解的地方,hibernate的多對一關係生成實體類中屬性包括一方類型的屬性,在action層用json直接把list結果集轉爲json字符串的時候報錯,而後我用了jackson和fastjson和gson。oh,仍然沒辦法。不得已我用了最原始的方法,就是在action中把list結果集循環出來拼成json格式的字符串。。。javascript
好了,直接上各部分的代碼吧html
個人頁面實現的效果:java
一、數據庫表:mysql
表結構特別簡單:district表與street表是一對多的關係jquery
二、須要用到的jar包ajax
hibernate的jar包:連接:http://pan.baidu.com/s/1o8FDGuQ 密碼:do74sql
struts2的jar包:連接:http://pan.baidu.com/s/1kV6WtDX 密碼:u744數據庫
mysql的jar包:連接:http://pan.baidu.com/s/1cAC1NS 密碼:k8x1apache
三、實體類我是用MyEclipse DataBase explorer自動生成的,具體操做方法這裏不細講了,自行百度或googlejson
四、hibernate的配置文件等我也是myeclipse自動生成的,具體操做方法這裏不細講了,自行百度或google
五、直接看dao層
查出全部縣:
package dao.impl; import java.util.List; import util.HibernateSessionFactory; import dao.DistrictDao; import entity.District; public class DistrictDaoImpl implements DistrictDao { @Override public List<District> getDistricts() { List<District> districtlist = null; try { districtlist = HibernateSessionFactory.getSession().createCriteria(District.class).list(); } catch (Exception e) { e.printStackTrace(); } return districtlist; } }
街道dao:
package dao.impl; import java.util.List; import org.hibernate.criterion.Restrictions; import util.HibernateSessionFactory; import dao.StreetDao; import entity.Street; public class StreetDaoImpl implements StreetDao { @Override public List<Street> getStreetsByDistrictId(int districtid) { List<Street> streetlist=null; try { streetlist = HibernateSessionFactory.getSession().createCriteria(Street.class).add(Restrictions.eq("district.id", districtid)).list(); } catch (Exception e) { e.printStackTrace(); } return streetlist; } }
service:我這裏直接省略了
五、action
出縣區列表
package action; import java.util.List; import com.opensymphony.xwork2.ActionSupport; import dao.DistrictDao; import dao.impl.DistrictDaoImpl; import entity.District; public class DostrictAction extends ActionSupport { private List<District> districtlist=null; private DistrictDao districtDao = new DistrictDaoImpl(); public List<District> getDistrictlist() { return districtlist; } public void setDistrictlist(List<District> districtlist) { this.districtlist = districtlist; } public String getDistrict(){ districtlist =districtDao.getDistricts(); return SUCCESS; } }
出街道列表
package action; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletResponse; import net.sf.json.JSONArray; import net.sf.json.JsonConfig; import net.sf.json.util.PropertyFilter; import org.apache.struts2.ServletActionContext; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SimplePropertyPreFilter; import com.fasterxml.jackson.databind.ObjectMapper; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import dao.StreetDao; import dao.impl.StreetDaoImpl; import entity.Street; public class StreetAction extends ActionSupport { private List<Street> streetlist; private String district_id; public String getDistrict_id() { return district_id; } public void setDistrict_id(String district_id) { this.district_id = district_id; } public List<Street> getStreetlist() { return streetlist; } public void setStreetlist(List<Street> streetlist) { this.streetlist = streetlist; } public String getStreets(){ StreetDao streetDao=new StreetDaoImpl(); try { System.out.println("2222222222222"); streetlist = streetDao.getStreetsByDistrictId(Integer.parseInt(district_id)); System.out.println("district_id=="+district_id); System.out.println(streetlist.size()); StringBuffer sb=new StringBuffer("["); if(streetlist.size()>0 && streetlist!=null){ for(int i=0;i<streetlist.size();i++){ Street street = streetlist.get(i); sb.append("{'id':'"+street.getId()+"','name':'"+street.getName()+"'}"); if(i!=streetlist.size()-1){ sb.append(","); } } } sb.append("]"); HttpServletResponse response = (HttpServletResponse) ActionContext.getContext().get(ServletActionContext.HTTP_RESPONSE); response.setCharacterEncoding("utf-8"); System.out.println("array======="+sb); response.getWriter().print(sb); } catch (Exception e) { e.printStackTrace(); } return null; } }
六、index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags" %> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <script type="text/javascript" src="js/jquery-1.8.3.min.js"></script> <script type="text/javascript"> $(document).ready(function(){ $("#district_id").change(function(){ var district_id = $("#district_id").val(); var street_id = $("#street_id"); var url="<%=request.getContextPath()%>/streetlist"; $.ajax({ url:url, type:'post', data:{"district_id":district_id}, success:function(data){ var obj = eval("(" + data + ")"); if(obj.length!=0){ var $street_id= $("#street_id"); $street_id.empty(); for(var i=0;i<obj.length;i++){ var $option = "<option value=\""+obj[i].id+"\">"+obj[i].name+"</option>"; $street_id.append($option); } } }, }); }); }); </script> </head> <body> 地址: <select name="district_id" id="district_id" > <option value=''>請選擇地區</option> <s:iterator value="districtlist" var="district"> <option value='<s:property value="#district.id"/>'> <s:property value="#district.name"/> </option> </s:iterator> </select> <select name="street_id" id="street_id"> </select> <s:debug></s:debug> </body> </html>
七、struts也是myeclipse自動生成的。自行百度或google
struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <constant name="struts.devMode" value="true"></constant> <package name="district" namespace="/" extends="struts-default"> <action name="districtlist" class="action.DostrictAction" method="getDistrict"> <result>/index.jsp</result> </action> </package> <package name="street" namespace="/" extends="struts-default"> <action name="streetlist" class="action.StreetAction" method="getStreets"> </action> </package> </struts>