2017-04-25 30 views
1

我有一個java servlet,它以數組格式將json對象發送到jsp頁面。將json數組從servlet獲取到javascript變量

這裏是我的servlet(它的一部分):

List<HistoryLeavesScalar> returnedPastInfo = SaveDAO.getPastInformation(username); 
JSONArray jsonArray = new JSONArray(returnedPastInfo); 
String s = jsonArray.toString(); 
System.out.println("\n\n"+"JSON ARRAY is : "+s); 

HttpSession session = request.getSession(true); 
session.setAttribute("jsonArray",jsonArray); 
this.getServletContext().getRequestDispatcher("/calendar.jsp") 
.forward(request, response); 

是System.out.print是JSON是這樣在我的控制檯: [{ 「結束日期」:「2017年4月22日「 」REQ「: 」2017年4月19日「, 」NR「:2, 」類型「: 」CO「, 」的startDate「: 」2017年4月20日「, 」德普「:」 2017年4月19日「},{」 結束日期 「:」 2017年4月22" 日, 「REQ」: 「2017年4月20日」, 「NR」:3, 「類型」: 「CM」, 「的startDate」:「2017-04 -20「,」Dep「:」2017-04-19「}]

這個Json數組我想在JavaScript標記中只能看到這樣的格式:(這是calendar.jsp - 它的一部分)

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> 
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
    <%@ page import="javax.servlet.jsp.jstl.core.*"%> 
    <%@ page import="javax.servlet.jsp.el.*" %> 
    <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%> 
<script type="text/javascript"> 

    var USER_DAYS = [ 
       <c:forEach items="${jsonArray}" var="jsonArray"> 


         { 
          id: '${jsonArray.nr}', 
          date: '${jsonArray.req}', 
          title: '${jsonArray.type}', 
          startDate: '${jsonArray.startDate', 
          endDate: '${jsonArray.endDate', 
          allDay: true, 
          className: 'done' 
         } 
       </c:forEach> 
    ]; 
</script> 

我不知道如何從USER_DAYS變量(javascript)中的servlet中訪問來自該json的值。如何把json的值放在id,date,title,startDate,endDate中。

我不知道jstl是否在JavaScript標記中工作。我不知道如何打印這些值(無論它們是什麼 - 它可以包含很多信息,全部以這種格式)。

我想提一提的是,如果我將javascript變量變成像這樣的東西:它工作得很好。但是這些是我手寫的值,但是現在我需要它們的動態...而且這些信息必須來自servlet到calendar.jsp。

var USER_DAYS = [ 
     { 
      id: 1, 
      date: '2017-04-05', 
      title: 'CO', 
      start: new Date(2017, 3, 5), 
      end: new Date(2017, 3, 7), 
      allDay: true, 
      className: 'done' 
     }, 

有人可以幫助我嗎?

+1

在JavaScript剛剛嘗試這一點。不需要任何JSP標籤。直接,我們可以將模型屬性分配到我們的js變量中。 var USER_DAYS ='$ {jsonArray}'; – Prasath

+0

爲什麼不在會話中保存's'並打印?它已經是JSON對象的正確字符串表示形式,不需要創建循環並寫入破壞的JSON – BackSlash

+0

嘗試使用'var USER_DAYS = JSON.parse('$ {jsonArray}');' –

回答

1

你已經擁有了它作爲字符串:在會議上,而不是jsonArray

String s = jsonArray.toString(); 

商店s;

session.setAttribute("jsonArray", s); 

而且在servlet打印:

var USER_DAYS = ${jsonArray}; 

我的測試

的Java servlet(樣本數據):

enter image description here

bingo.jsp

enter image description here

HTML結果:

enter image description here

渲染結果:

enter image description here

它的工作原理。

+0

你確定這應該起作用嗎? –

+0

@AururRahmanMunna爲什麼不應該呢? – BackSlash

+0

我認爲在你將'USER_DAYS'當作json對象之前,你應該首先解析它,不是嗎? –

0

,你可以這樣寫

<script> 
    var DAYS = '${jsonArray}'; 
    if(DAYS.length > 0){ 
    var USER_DAYS = { 
      id: DAYS[0].nr, 
      date: DAYS[0].req, 
      title: DAYS[0].type, 
      startDate: new Date(DAYS[0].startDate), 
      endDate: new Date(DAYS[0].endDate), 
      allDay: true, 
      className: 'done' 
     }; 
    } 
</script> 
0

您可以分析您的jsonString的JavaScript JSON對象。然後你想改變你的json對象的一些對象鍵,再刪除一個額外的鍵[e.g "Dep":"2017-04-19"],最後想在你的最終json對象中添加兩個鍵值。

allDay: true, 
className: 'done' 

這裏是將solution.set數據作爲json字符串。

session.setAttribute("jsonArray",jsonArray.toString()); 

在JSP

var USER_DAYS = JSON.parse('${jsonArray}'); 

這將使名爲USER_DAYS一個JSON對象。 ,最後修改您的JSON對象,

var USER_DAYS = JSON.parse('[{"endDate":"2017-04-22","req":"2017-04-19","nr":2,"type":"CO","startDate":"2017-04-20","Dep":"2017-04-19"},{"endDate":"2017-04-22","req":"2017-04-20","nr":3,"type":"CM","startDate":"2017-04-20","Dep":"2017-04-19"}]'); 
 

 
console.log('Original JSON = ' +JSON.stringify(USER_DAYS)); 
 

 
USER_DAYS.forEach(function(e) { 
 
    e.id = e.nr; 
 
    delete e.nr; 
 
    e.date = e.req; 
 
    delete e.req; 
 
    e.title=e.type; 
 
    delete e.type; 
 
    e.allDay= true; 
 
    e.className='done'; 
 
    delete e.Dep; 
 
    
 
}); 
 

 
console.log('Modified JSON = '+JSON.stringify(USER_DAYS));

JSFIDDLE