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


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

    啰嗦:我做这个用了很久,用了2周,难点没破解的地方,hibernate的多对一关系生成实体类中属性包括一方类型的属性,在action层用json直接把list结果集转为json字符串的时候报错,然后我用了jackson和fastjson和gson。oh,仍然没办法。不得已我用了最原始的方法,就是在action中把list结果集循环出来拼成json格式的字符串。。。

    好了,直接上各部分的代码吧

    我的页面实现的效果:

    1、数据库表:

    表结构特别简单:district表与street表是一对多的关系

    2、需要用到的jar包

    hibernate的jar包:链接:http://pan.baidu.com/s/1o8FDGuQ 密码:do74

    struts2的jar包:链接:http://pan.baidu.com/s/1kV6WtDX 密码:u744

    mysql的jar包:链接:http://pan.baidu.com/s/1cAC1NS 密码:k8x1

    3、实体类我是用MyEclipse DataBase explorer自动生成的,具体操作方法这里不细讲了,自行百度或google

    4、hibernate的配置文件等我也是myeclipse自动生成的,具体操作方法这里不细讲了,自行百度或google

    5、直接看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:我这里直接省略了

    5、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;
        }
    }

    6、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>

    7、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>    
  • 相关阅读:
    java 可伸缩阻塞队列实现
    java mysql大数据量批量插入与流式读取分析
    innodb next-key lock引发的死锁
    jremoting的功能扩展点
    java开源项目jremoting
    Linux下搭建gtk+2.0开发环境
    《程序员的办公室日常》第二回 拜师
    《程序员的办公室日常》第一回 相识
    【限时免费】近1000G JAVA学习视频下载
    裁员之后,我才明白它的重要性
  • 原文地址:https://www.cnblogs.com/sincoolvip/p/6146481.html
Copyright © 2020-2023  润新知