13 Stimmen

Wie überträgt man ein Java-Array in ein JavaScript-Array mit jsp?

Ich habe eine Liste von Zeichenfolgen auf meinem Server, die ich versuche, an den Client in Form eines Arrays zu erhalten. Der Code, den ich zu verwenden versuche, ist der folgende:

Innerhalb der jsp habe ich eine List<String> Spalte

Ich versuche es mit dem folgenden Code:

<%int j = 0; %>
for(var i = 0; i < <%=columns.size()%>; i++)
{
  colArray[i] = "<%=columns.get(j++)%>";
}

Dieser Code gibt einfach das erste Element in der Spaltenliste für jedes Element im colArray zurück.

Ich habe es auch versucht:

colArray = <%=columns.toArray()%>;

was ebenfalls nicht funktioniert. Ich habe das Gefühl, dass ich irgendwo einen kleinen Fehler mache und ihn einfach nicht sehe. Ist das, was ich zu tun versuche, auf die Art und Weise, die ich versuche, möglich?

Danke.

19voto

Michael Borgwardt Punkte 334642

Sie verwechseln den JSP-Code, der auf dem Server ausgeführt wird, mit dem JavaScript-Code, der auf dem Client ausgeführt wird. Das Snippet <%=columns.get(j++)%> wird einmal auf dem Server ausgeführt, und die JavaScript-Schleife ist an dieser Stelle irrelevant. Wenn sie beim Client ankommt, sagt der Schleifenkörper nur colArray[i] = "first entry"; was natürlich die gleiche Zeichenkette in jedes Element des Arrays setzt.

Stattdessen müssen Sie eine Schleife auf dem Server ausführen lassen, etwa so:

<% for (int i=0; i<columns.size(); i++) { %>
colArray[<%= i %>] = "<%= columns.get(i) %>"; 
<% } %>

Meine JSP-Kenntnisse sind etwas eingerostet, und die Syntax könnte anders sein, aber ich hoffe, Sie verstehen die Idee.

Bearbeiten: Wie bereits in den Kommentaren erwähnt, müssen Sie sehr vorsichtig sein, um alles in diesen Strings zu escapen, was dazu führen könnte, dass sie als JavaScript-Code interpretiert werden (vor allem Anführungszeichen) - insbesondere, wenn sie benutzergenerierte Inhalte enthalten. Andernfalls lassen Sie Ihre App weit offen für Website-übergreifendes Scripting y Cross-Site Request Forgery Angriffe.

6voto

perrohunter Punkte 3227

Versuchen Sie es mit JSON (Javascript object notation) es wäre ganz einfach, das Array zu kodieren und dekodieren Sie es auf javascript

hier nachsehen

http://www.json.org/java/index.html

5voto

Grant Wagner Punkte 24137

Sobald das JavaScript den Client erreicht, wird der Servercode nicht mehr ausgeführt. Der Servercode wird nicht "parallel" zum Clientcode ausgeführt.

Sie müssen die gesamte JavaScript-Initialisierung in Java erstellen und sie vollständig und ausführbar an den Client senden:

<%
StringBuffer values = new StringBuffer();
for (int i = 0; i < columns.size(); ++i) {
    if (values.length() > 0) {
        values.append(',');
    }
    values.append('"').append(columns.get(i)).append('"');
}
%>
<script type="text/javascript">
var colArray = [ <%= values.toString() %> ];
</script>

Das ist nur eine Möglichkeit, Sie können die Ausgabe auch "on the fly" erstellen, indem Sie den Servercode in die Datei [ y ] . Ich habe dieses Beispiel verwendet, um die Trennung zwischen der Erstellung der Zeichenfolge, die das clientseitige JavaScript umfasst, und der Ausgabe an den Browser zu demonstrieren.

3voto

fmanna Punkte 31

Exp Sprache:

colArray = ${columns}

3voto

F3R1 Punkte 463

Bei mir hat diese Lösung funktioniert. Zunächst sollten Sie ein JSONArray erstellen und dessen Methode toJSONString() verwenden. Diese Methode wandelt die Liste in JSON-Text um. Das Ergebnis ist ein JSON-Array.

<% 
List<String> exampleList = new ArrayList<>();
exampleList.add("Apple");
exampleList.add("Orange");
exampleList.add("Lemon");

JSONArray fruitList = new JSONArray();
fruitList.addAll(exampleList);
%>

In Ihrer JSP-Seite sollten Sie die Methode toJSONString() der Liste aufrufen und den JSON-Text an ein JavaScript-Array übergeben.

<script type="text/javascript"> var fruitArray = <%= fruitList.toJSONString() %>;</script>

(Optional können Sie auch eine einfache Getter-Methode für die Liste erstellen. Für den Fall, dass Sie nur die JAVA-Klasse - die das Listenfeld hat - in der JSP-Seite instanziieren).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X