struts-hibernate-ajax完成区县和街道级联下拉框功能

前言:此次dao用的是hibernate,控制层和显示层用的是struts,页面用的是ajax。。。

啰嗦:我作这个用了好久,用了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>
  &nbsp; &nbsp;
   <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>    
相关文章
相关标签/搜索