Java後臺與js前端之間的通訊問題
今天寫程式碼遇到一個問題,就是需要在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>
<classifier>jdk13</classifier>
</dependency>
匯入這個包,與其相關聯的包都會匯入。