针对《struts-hibernate-ajax完成区县和街道级联下拉框功能》进行补充,上一篇中,要在action中拼接JSON格式字符串,很容易手抖。直接用json处理一下转成json格式字符串即可。但之前也讲过,json对于hibernate级联关系的解析,不是很到位啊!

所以ajax那边就得层层循环剥离,找出想要的结果

action:

用的是

import com.alibaba.fastjson.JSON;

具体的jar包请自行百度!!

public String getStreets(){
StreetDao streetDao=new StreetDaoImpl();
try {
streetlist = streetDao.getStreetsByDistrictId(Integer.parseInt(district_id));
/*System.out.println("district_id=="+district_id);
System.out.println(streetlist.size());*/ String content = JSON.toJSONString(streetlist);
/*ObjectMapper mapper = new ObjectMapper();
String content = mapper.writeValueAsString(streetlist);*/
HttpServletResponse response = (HttpServletResponse) ActionContext.getContext().get(ServletActionContext.HTTP_RESPONSE);
response.setCharacterEncoding("utf-8");
System.out.println("array======="+content);
response.getWriter().print(content);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

action只是小小的改动,但语法简单了很多。

出来的json结果是:

array=======[{"district":{"id":1,"name":"天河区","streets":[{"district":{"$ref":"$[0].district"},"id":4,"name":"天河区街道4"},{"district":{"$ref":"$[0].district"},"id":2,"name":"天河区街道2"},{"$ref":"$[0]"},{"district":{"$ref":"$[0].district"},"id":3,"name":"天河区街道3"}]},"id":1,"name":"天河区街道1"},{"$ref":"$[0].district.streets[1]"},{"$ref":"$[0].district.streets[3]"},{"$ref":"$[0].district.streets[0]"}]

看上去真是头疼,即使json格式清晰要想取streets的id和name也不很规律啊,我用了firefox的hj插件JSON-Handle格式化了一下控制台的json字符串

[
{
"district": {
"id": 1,
"name": "天河区",
"streets": [
{
"district": {
"$ref": "$[0].district"
},
"id": 4,
"name": "天河区街道4"
},
{
"district": {
"$ref": "$[0].district"
},
"id": 2,
"name": "天河区街道2"
},
{
"$ref": "$[0]"
},
{
"district": {
"$ref": "$[0].district"
},
"id": 3,
"name": "天河区街道3"
}
]
},
"id": 1,
"name": "天河区街道1"
},
{
"$ref": "$[0].district.streets[1]"
},
{
"$ref": "$[0].district.streets[3]"
},
{
"$ref": "$[0].district.streets[0]"
}
]

那么ajax怎么获取街道呢?

<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 url="<%=request.getContextPath()%>/streetlist";
$.ajax({
url:url,
type:'post',
timeout:60000,
data:{"district_id":district_id},
dataType:'json',
success:function(data){
var $street_id = $("#street_id");
var $option =[];
$street_id.empty();
//循环整个json大数组
$.each(data,function(index,item){
//找出第一级的街道ID
if(item.id != '' && item.id !==undefined){
$option.push("<option value='"+item.id+"'>"+item.name+"</option>");
}
//级联关系下的街道ID
$.each(item.district.streets,function(inx,im){
if(im.id!='' &&im.id !==undefined){
$option.push("<option value='"+im.id+"'>"+im.name+"</option>");
}
}); $street_id.append($option);
});
option.push("");
},
error:function(){
alert("查询失败,请联系管理员");
}, });
}); }); </script>

好吧,我也是一点点试的!不行就每一步alert呗!

struts-hibernate-ajax完成区县和街道级联下拉框功能(二补充使用json解析list结果集,ajax循环json层级处理)的更多相关文章

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

    前言:这次dao用的是hibernate,控制层和显示层用的是struts,页面用的是ajax... 啰嗦:我做这个用了很久,用了2周,难点没破解的地方,hibernate的多对一关系生成实体类中属性 ...

  2. jQuery无限级联下拉框插件

    自己编写jQuery插件 之 无限级联下拉框   因为是级联,所以数据必须是树型结构的,我这里的测试数据如下: 看下效果图: 1.>图一: 2.>图二: 3.>图三: 由图可知,下拉 ...

  3. JQuery和ASP.NET分别实现级联下拉框效果

    在学习JQuery之前知道下拉框的级联效果可以通过asp.net控件实现,现在学习了JQuery,知道了JQuery和select也能实现.我分别举两个小例子说明这两种方法如何实现. 1.用JQuer ...

  4. JS级联下拉框

    //Ajax级联获取SDKfunction GetDropDownList(parent_ddlID, fill_dllID, url, param) {    this.pId = parent_d ...

  5. 自动补齐flexselect+级联下拉框案例

    在开发web应用时,经常遇到类似省市区级联下拉框操作,即选中省份自动级联加载该省份所有的市,选中市自动级联加载该市所有的区:假设省市区的数据量很大,此时用户想选中某市,因而要从上往下查找,可能半天都找 ...

  6. EXCEL(1)级联下拉框

    EXCEL级联下拉框 http://jingyan.baidu.com/article/3c343ff756e0cf0d377963f9.html 在输入一些多级项目时,如果输入前一级内容后,能够自动 ...

  7. js基于json的级联下拉框

    级联下拉列表是项目中常用到的.比如省市县,比如企业性质等,做成一个js通用组件, 在静态页出来后可以直接插入,将数据和html静态页做一个解耦. 贴出来抛砖引玉吧. /** * @author sun ...

  8. C# ,数据导出到带有级联下拉框的模板(一,模板的级联功能)

    一.首先解决如何做模板中增加级联功能 1,首先打开一个新的Excel文件,新增sheet,把分类保存在里面,如下图所示 2.回到sheet1,选中要增加下拉框的行(注意:请排除首行,首行是标题) 3. ...

  9. Struts2 级联下拉框 详解析

    目录(?)[+] 运行环境:myeclipse8.6+jboss5.1+jvm1.6 先看最后目录结构: 直接上源码: complexFormTag.jsp: <%@ page language ...

随机推荐

  1. 取代SharedPreferences的多进程解决方案

    Android的SharedPreferences用来存储一些键值对, 但是却不支持跨进程使用. 跨进程来用的话, 当然是放在数据库更可靠啦, 本文主要是给作者的新库PreferencesProvid ...

  2. iOS App 不支持http协议 App Transport Security has blocked a cleartext HTTP (http://)

    目前iOS已经不支持http协议了,不过可以通过info.plist设置允许 App Transport Security has blocked a cleartext HTTP (http://) ...

  3. 批量创建10个用户stu01-stu10

    1.批量创建10个用户stu01-stu10,并且设置随机8位密码,要求不能用shell循环(例如:for,while等),只能用命令及管道实现. ##方法1: [root@server tmp]# ...

  4. 【码在江湖】前端少侠的json故事(下):jsonp的应用

    jsonp的应用 话说天下大势,分久必合,合久必分,代码江湖自进入21世纪以来,前后端分离成为了大势所趋,代码分工更为精细,更为深入,而正所谓码在江湖,身不由己,为了更好的实现需求,程序猿们必须不断学 ...

  5. Unity3D 利用欧拉角实现实体的旋转

    本文系作者原创,转载请注明出处 刚刚入门U3D,也是很多东西搞不懂,最先接触的就是自己尝试去获取键盘上的GetPress之类的事件了吧 官方的API DOC也是帮了不少忙,到处吸收了各位博主的文章也是 ...

  6. Dom探索之基础详解

    认识DOM DOM级别 注::DOM 0级标准实际并不存在,只是历史坐标系的一个参照点而已,具体的说,它指IE4.0和Netscape Navigator4.0最初支持的DHTML. 节点类型 注:1 ...

  7. 关于HTTP协议,一篇就够了

    HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送 ...

  8. MVC使用ajax异步刷新时怎样输出从后台中传过来的JSON数据

    前言 这几天在学习MVC使用AJAX异步刷,因为是新手.所以在js中传参数到后台以及后台返回数据到前台怎么接受,怎么前台遍历出JSON数据都开始不知道,相信新手在使用时跟我一样会遇到,这里我就和大家分 ...

  9. #define与typedef在重定义类型中的区别

    #define 为完全的替换 typedef 重新定一个数据类型 eg #define charp1 char* typedef char* charp2charp1 a,b; //a char* b ...

  10. Ajax状态值及状态码

    1- AJAX状态值与状态码区别AJAX状态值是指,运行AJAX所经历过的几种状态,无论访问是否成功都将响应的步骤,可以理解成为AJAX运行步骤.如:正在发送,正在响应等,由AJAX对象与服务器交互时 ...