2017-04-25 3 views
1

Ich habe ein Java-Servlet, das ein JSON-Objekt an eine JSP-Seite in einem Javascript Variabile mit Array-Format sendet.Das JSON-Array von Servlet zu Javascript-Variable

Hier ist mein Servlet (ein Teil davon):

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); 

die System.out.print JSON so etwas in meiner Konsole ist: [{ "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," Typ ":" CM "," startDate ":" 2017-04 -20 "," Dep ":" 2017-04-19 "}]

Diese JSON-Array möchte ich in JavaScript-Tag so in diesem Format nur sichtbar sein: (Dies ist calendar.jsp - ein Teil davon)

<%@ 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> 

Ich weiß nicht, wie auf die Werte von diesem JSON zugreifen, die von dem Servlet in USER_DAYS Variable (Javascript) kommt. Wie man die Werte von json in ID, Datum, Titel, startDate, endDate setzt.

Ich weiß nicht, ob jstl in einem Javascript-Tag funktioniert. Ich weiß nicht, wie ich diese Werte drucken soll (was auch immer sie sind - sie können viele Informationen enthalten, alle in diesem Format).

Ich möchte erwähnen, dass, wenn ich die Javascript-Variable in etwas so ändern: es funktioniert gut. Aber das sind Werte, die ich handgeschrieben habe, aber jetzt möchte ich sie dynamisch ... und diese Informationen müssen von Servlet in calendar.jsp kommen.

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' 
     }, 

Kann mir jemand helfen?

+1

Genau dies versuchen. Keine Notwendigkeit für JSP-Tags. Direkt können wir unseren js-Variablen ein Modellattribut zuweisen. var USER_DAYS = '$ {jsonArray}'; – Prasath

+0

Warum speichern Sie nicht 's' in der Sitzung und drucken es? Es ist bereits eine korrekte Zeichenfolgendarstellung des JSON-Objekts, keine Notwendigkeit Schleifen zu erstellen und gebrochen JSON – BackSlash

+0

Versuchen Sie mit 'var USER_DAYS = JSON.parse ('$ {jsonArray}');' –

Antwort

1

Sie haben bereits als string:

String s = jsonArray.toString(); 

Shop s in Sitzung statt jsonArray;

session.setAttribute("jsonArray", s); 

Und im Servlet drucken:

var USER_DAYS = ${jsonArray}; 

MY TEST

Java-Servlet (mit Beispieldaten):

enter image description here

bingo.jsp:

enter image description here

HTML Ergebnis:

enter image description here

gerenderte Ergebnis:

enter image description here

Es funktioniert.

+0

Sind Sie sicher, dass dies funktioniert? –

+0

@AtaurRahmanMunna Warum sollte es nicht? – BackSlash

+0

Ich denke, bevor du 'USER_DAYS' als JSON-Objekt behandelst, solltest du es zuerst analysieren, nicht wahr? –

0

können Sie dieses

<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

schreiben Sie Ihre jsonString Javascript JSON Objekt analysieren kann. Dann möchten Sie einige der Objektschlüssel Ihres json Objekts ändern, einen weiteren zusätzlichen Schlüssel [e.g "Dep":"2017-04-19"] löschen und schließlich zwei Schlüssel mit Werten in Ihrem endgültigen json Objekt hinzufügen.

allDay: true, 
className: 'done' 

Hier sind die solution.set Daten als JSON-String.

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

In Ihrem jsp

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

Dies wird ein JSON Objekt mit dem Namen USER_DAYS machen. Und endlich Ihre JSON-Objekt ändern,

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));

die See in Javascript JSFIDDLE