Greifen Sie in JavaScript auf Java-/Servlet-/JSP-/JSTL-/EL-Variablen zu

Lesezeit: 4 Minuten

Greifen Sie in JavaScript auf Java Servlet JSP JSTL EL Variablen zu
Rot

Ich habe ein Formular in JSP. Ich muss es basierend auf dem Anforderungsobjekt (vom Servlet) füllen. Wie verwende ich Java Script für den Zugriff auf Anforderungsobjektattribute oder können Sie mir eine andere bessere Möglichkeit zum dynamischen Ausfüllen von Formularen vorschlagen?

Greifen Sie in JavaScript auf Java Servlet JSP JSTL EL Variablen zu
BalusC

Sie müssen sich darüber im Klaren sein, dass Java/JSP lediglich ein HTML/CSS/JS-Code-Erzeuger ist. Alles, was Sie tun müssen, ist, JSP die Java-Variable so drucken zu lassen, als ob es sich um eine JavaScript-Variable handelt und die generierte HTML/JS-Codeausgabe syntaktisch gültig ist.

Vorausgesetzt, die Java-Variable ist im EL-Bereich verfügbar von ${foo}hier sind einige Beispiele, wie man es druckt:

<script>var foo = '${foo}';</script>
<script>someFunction('${foo}');</script>
<div onclick="someFunction('${foo}')">...</div>

Stellen Sie sich vor, die Java-Variable hat den Wert "bar"dann generiert JSP letztendlich diesen HTML-Code, den Sie per Rechtsklick überprüfen können. Quelltext anzeigen im webbrowser:

<script>var foo = 'bar';</script>
<script>someFunction('bar');</script>
<div onclick="someFunction('bar')">...</div>

Beachten Sie, dass diese einfachen Anführungszeichen daher obligatorisch sind, um eine Zeichenfolge vom Typ Variable in JS darzustellen. Wenn Sie verwendet haben var foo = ${foo}; stattdessen würde es dann drucken var foo = bar;, was zu “bar is undefined”-Fehlern führen kann, wenn Sie versuchen, weiter unten im JS-Code darauf zuzugreifen (Sie können JS-Fehler in der JS-Konsole des Webentwickler-Toolsets des Browsers sehen, die Sie öffnen können, indem Sie F12 in Chrome/FireFox23+/ drücken. IE9+). Beachten Sie auch, dass es gut funktioniert, wenn die Variable eine Zahl oder einen booleschen Wert darstellt, der nicht in Anführungszeichen gesetzt werden muss.

Wenn die Variable aus einer benutzergesteuerten Eingabe stammt, denken Sie daran, dies zu berücksichtigen XSS-Angriffslöcher und JS entkommt. Unten auf unserer EL-Wiki-Seite finden Sie ein Beispiel, wie Sie eine benutzerdefinierte EL-Funktion erstellen, die eine Java-Variable zur sicheren Verwendung in JS maskiert.

Wenn die Variable etwas komplexer ist, z. B. eine Java-Bean oder eine Liste davon oder eine Karte, dann können Sie eine der vielen verfügbaren verwenden JSON-Bibliotheken um das Java-Objekt in einen JSON-String zu konvertieren. Hier ist ein Beispiel, bei dem Gson angenommen wird.

String someObjectAsJson = new Gson().toJson(someObject);

Beachten Sie, dass Sie es auf diese Weise nicht mehr als Zeichenfolge in Anführungszeichen drucken müssen.

<script>var foo = ${someObjectAsJson};</script>

Siehe auch:

  • Unsere JSP-Wiki-Seite – siehe Kapitel “JavaScript”.
  • Wie kann man JavaScript in JSP entkommen?
  • Rufen Sie Servlet auf und rufen Sie Java-Code zusammen mit Parametern aus JavaScript auf
  • Wie verwendet man Servlets und Ajax?

  • Hallo @BalusC. Ich bin mir nicht sicher, was das OP mit “Objekt vom Servlet anfordern” meint. Was muss ich tun, um Attribute im Anforderungsobjekt zu haben?

    – MegaMatt

    14. Dezember 2016 um 1:35 Uhr

  • Ich verwende Datenattribute, um Inline zu vermeiden script Tags und globale js-Variablen. Ist Ihre Lösung der Verwendung von a vorzuziehen? data-attribute? (Ich beschäftige mich mit der Speicherung einer großen JSON Variable).

    – sieuv

    18. März 2018 um 8:59 Uhr

  • @BalusC Ich bin mir nicht sicher, ob Sie für den vorherigen Kommentar benachrichtigt wurden. Wollte nur sichergehen, dass du es gesehen hast…

    – sieuv

    25. März 2018 um 10:24 Uhr

Wenn Sie die Formularfelder basierend auf Parametern in der HTTP-Anforderung vorab ausfüllen, warum tun Sie dies dann nicht einfach auf der Serverseite in Ihrer JSP … und nicht auf der Clientseite mit JavaScript? In der JSP würde es ungefähr so ​​aussehen:

<input type="text" name="myFormField1" value="<%= request.getParameter("value1"); %>"/>

Auf der Clientseite hat JavaScript nicht wirklich das Konzept eines “Anfrageobjekts”. Sie müssen die Abfragezeichenfolge praktisch selbst manuell parsen, um an die CGI-Parameter zu gelangen. Ich vermute, das ist nicht das, was Sie eigentlich wollen.

  • Ja … natürlich möchten Sie auch den Parameter bereinigen, um jegliche Art von XSS- oder Injection-Angriffen zu vermeiden.

    – Steve Perkins

    30. September 2010 um 16:55 Uhr

In JSP-Datei:

<head>
...
<%@ page import="com.common.Constants" %>
...
</head>
<script type="text/javascript"> 
        var constant = "<%=Constants.CONSTANT%>"
</script>

Diese konstante Variable steht dann für .js-Dateien zur Verfügung, die nach dem obigen Code deklariert werden.

Constants.java ist eine Java-Datei, die eine statische Konstante namens CONSTANT enthält.

Das Szenario, das ich hatte, war, dass ich eine Konstante aus einer Eigenschaftsdatei benötigte, also tat ich dies, anstatt eine Eigenschaftsdatei für Javascript zu erstellen.

Auf der JSP-Seite:

<c:set var="list_size" value="${list1.size() }"></c:set>

Greifen Sie auf diesen Wert auf der JavaScript-Seite zu mit:

var list_size = parseInt($('#list_size').val());

Ich habe eine Javascript-Seite in meinem Projekt extern hinzugefügt.

963280cookie-checkGreifen Sie in JavaScript auf Java-/Servlet-/JSP-/JSTL-/EL-Variablen zu

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy