实现多级下拉框联动获取数据
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>");
}
}
);
}
相关文章推荐
- 用Ajax实现多级联动下拉列表For JSP(无限级别,JSON传输数据,含全国地区数据库
- 实现jsp页面二级下拉框联动,实时读取数据库数据
- 多级联动下拉选择框,动态获取下一级
- 用Jquery实现多级下拉框无刷新的联动
- ajax实现下拉框与表格中的单选按钮联动,数据从数据库中查出
- 多级联动下拉列表Ajax方案实现
- dhl:ASP.NET MVC + Jquery实现Ajax下拉框数据2或3级联动(+用户控件)
- JavaScript实现二级、多级(N级)联动下拉列表框更新版(续)- 四级联动的演示
- JavaScript实现二级、多级(N级)联动下拉列表框更新版,支持IE6,FireFox,函数和类两种调用方式,支持到N级,非常通用。
- Javascript实现下拉框多级联动效果
- 在一个jsp页面实现二级下拉框联动,实时读取数据库数据
- 多级联动下拉选择框,动态获取下一级
- ASP.NET MVC + Jquery 实现Ajax下拉框数据三级联动
- 用Ajax.net实现的一个无刷新的多级联动下拉列表框
- 多级联动下拉框控件实现
- 用Jquery实现多级下拉框无刷新的联动
- 在一个jsp页面实现二级下拉框联动,实时读取数据库数据(用javascript实现)
- vs2008中js调用web服务实现下拉框多级联动小记
- JavaScript实现二级、多级(N级)联动下拉列表框更新版(续)- 四级联动的演示
- js实现多级联动下拉框