Java后台与js前端之间的通信问题

来源:互联网 发布:mysql中的日期函数 编辑:程序博客网 时间:2024/05/21 18:39

      今天写代码遇到一个问题,就是需要在js中获取后台传过来的list集合,还需要对list进行遍历获取里面的对象,首先想到的是将list绑定到request对象上转发到前端,然后用EL表达式直接获取该list集合,可是遍历该list出问题了,因为此时list已经不是集合了,而是字符串,对字符串遍历只能得到单个字符,没法获取里面存储的对象,所以这条路走不通。

然后想到了先将数据传到JSP中,用jstl表达式对其进行遍历,将遍历得到的结果装到一个隐藏的div里面,通过jQuery获取该div里的HTML来间接获取list里的内容,这样做

是可以的,代码如下


这样做的坏处是还得写jstl及div,比较麻烦,然后想到了用json,流程是这样的,在后台先将list集合转化为json字符串,然后绑定到request上转发到前端,在js中直接用EL表达式获取已转化为json字符串的list,在js中json字符串会被自动转化为json对象,这样list就变成了json数组,遍历的时候就比较方便了,获取到json对象后,再根据键就可以取到值了,代码如下:

后台:

@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) 
throws ServletException, IOException {
List<Coord> list=dao.findAll();
//==================================
JSONArray jsonArray2 = JSONArray.fromObject(list);//将集合转换为json格式
String jsonString=jsonArray2.toString();//将json转换为字符串
//==================================
req.setAttribute("list", jsonString);
//请求转发
req.getRequestDispatcher("/baidu.jsp").forward(req, resp);
}

前端js:

 var points = new Array();
var list=${list};
for (var i in list) {
var lon=list[i].longitude;//经度
var lat=list[i].latitude;//纬度
points[i]=new BMap.Point(lon,lat);
}

使用JSONArray需要导入包json-lib,在阿里云的maven价包库中坐标为

<dependency>
 
        <groupId>net.sf.json-lib</groupId>
 
        <artifactId>json-lib</artifactId>
 
        <version>2.2.1</version>
 
        <classifier>jdk13</classifier>
</dependency>

导入这个包,与其相关联的包都会导入。