您的位置:首页 > 编程语言 > Java开发

实现多级下拉框联动获取数据

2017-05-18 20:02 591 查看

很多时候我们需要从数据库获取下拉列表的数据,比如:



上面的例子中,会根据区的变化,会从数据库中获取对应区中的所有街道,此时需要弄清楚区和街对应的映射关系

区的实体类:

public class District {

    private int id;

    private String name;

    private List<Street> streets;

街的实体类:

public class Street {

    private int id;

    private String name;

    private District district;

对应的两个DAO层需要的主要方法如下

public interface StreetDao {

    //根据id查找街道

    public Street findById(int id);

    //根据地区查询所有街道的方法

    public List<Street> findByDistrict(int dId);

}

public interface DistrictDao {

    public District findById(int id);//根据id查找区

    public List<District> findAll();//查询所有区

}

从实体类中可以看到,这两个类之间存在双向关联关系,对于区来说,与街道是一对多的映射关系。对于街道来说则是多对一的映射关系。所以两个在mybatis的两个映射文件中的resultMap节点应该是这样的配置:

    <resultMap type="District" id="DistrictResult">

        <id property="id" column="id"/>

        <result property="name" column="name"/>

        <collection property="streets" column="id" select="com.etc.dao.StreetDao.findByDistrict"></collection>

        </resultMap>

<resultMap type="Street" id="StreetResult">

        <id property="id" column="id"/>

        <result property="name" column="name"/>

        <association property="district" column="DISTRICT_ID" select="com.etc.dao.DistrictDao.findById">

        </association>

        </resultMap>

关键在于控制器,首先需要获取去的对象,然后根据这个区对象再查询出所有对应该区的街道集合

//处理区街信息的方法

    @RequestMapping(value="/qujie")

    public void QuJie(HttpServletRequest request , HttpServletResponse response){

        DistrictBiz dbiz=new DistrictBizimp();

        //获取选中的区

        String dId=request.getParameter("dId");

        if(dId!=null){

            //根据选中的区的id取出该区对象

            District district=dbiz.findById(Integer.parseInt(dId));

            //根据区对象获取所有街道,并封装到集合中

            List<Street> slist=district.getStreets();

            //把封装街数据的集合转为json对象

            try {

                JsonConfig jsonConfig = new JsonConfig();

                jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);

                jsonConfig.addIgnoreFieldAnnotation(District.class);

                JSONObject jsonObject=new JSONObject();

                //JSONArray jsonArray=JSONArray.fromObject(slist);

                JSONArray jsonArray =JSONArray.fromObject(slist, jsonConfig);

                jsonObject.put("street", jsonArray);

                String result = jsonObject.toString();

                response.getWriter().write(result);

            } catch (Exception e) {

                e.printStackTrace();

            }

        }

    }

最后使用ajax把控制器中的json对象接手过来显示到页面就可以啦!

function change() {

        $.getJSON(

            "house/qujie",

            {dId:$("#district").val()},

            function(data){

                document.getElementById("streets").options.length=0;

                for(var i=0;i<=data.street.length;i++){

                    $("#streets").append("<option value="+data.street[i].id+">"

                    +data.street[i].name+"</option>");

                }

            }

        );

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据 java 映射关系