Mit JSP-code in JavaScript
Will ich mit JSTL die fmt-Tags in JavaScript zu lokalisieren, meine Warnmeldungen.
Meine JavaScript-Datei ist eine eigenständige Datei, und wenn ich auch fmt-Tags in js, die Datei-Browsers, der JavaScript-Fehler. Ist es möglich, zu behandeln .js
Datei als .jsp
Dateien mit web.xml Konfiguration?
Kann bitte jemand empfehlen, wie kann ich das machen?
InformationsquelleAutor | 2009-03-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja:
Aber, es gibt keine wirklichen Vorteil in dies zu tun, da JavaScript-Dateien müssen nicht mit URLs mit der Endung in ‘.js'. Was bestimmt, ob eine Datei eine JavaScript-Datei ist welche MIME-media-Typ es diente als. Sie können diese von JSP-Verwendung:
oben. Dann können Sie direkt zu:
(Außer: in den aktuellen Browser-scripts verknüpft mit der <script> - tag funktioniert auch ohne den Content-Type richtig gesetzt, aber das ist wahrscheinlich nicht etwas, das zu verlassen sich auf.)
Dies ist wahrscheinlich nicht eine gute Idee. Die fmt-tag beschäftigt sich mit HTML-Escapezeichen für Zeichen, aber das, was Sie wollen, ist ein JavaScript-string-literal zu entkommen, zum Beispiel backslash-escape-Anführungszeichen. JSTL nicht bieten diese Funktion. Sie erhalten unerwartet-escaped '&' - Zeichen zeigt sich in Ihren JavaScript-strings, und die Verwendung von Apostroph oder Anführungszeichen in den Nachrichten brechen mir das ganze Drehbuch.
Außerdem dienen Häufig von JSP-Skripten enthalten Risiken, die eine schlechte Leistung und Cachen.
Ich würde vorschlagen, eine unabhängige Sprache lookup-system in JavaScript. Zum Beispiel umfassen eine pro-Sprache externen Skript:
(änderung 'en' zu entsprechen, welche Sprache Sie wollen), und in dieser Datei definieren Sie eine Suche wie:
Dann schauen
msg.messageName
für jede lokalisierbare Zeichenfolge in das Skript.Du meinst
<script src="/script/lang/lang_<c:out value="${langCode}"/>.js">
?danke bobince. würde das funktionieren: in einem früheren script-block zu tun: <script type="text/javascript"> var langCode =<%=request.getParameter("session_locale")%></script> dann im folgenden script-Abschnitt: <script src="/script/lang/lang_<c:out value="${langCode}"/>.js">. Ich bin mir nicht sicher, in JSP-wie finden Sie die var definiert in anderen script-block, wenn in einem bestimmten Fall tun zu müssen.
Das würde nicht funktionieren, da das
getParameter
Ausgang eingespeist wird, ohne JavaScript zu zitieren oder die Flucht.<%=
ohne ausdrückliche Flucht ist eine XSS-Sicherheitslücke; das nie tun. Wenn Sie wollen, um einen string in eine JavaScript-variable, die Sie verwenden können, eine Bibliothek zu tun, JavaScript string-literal zu entkommen, aber es ist in der Regel einfacher zu injizieren und es in HTML (mit impliziten HTML-escaping durch die Verwendung von zB<body data-lang-code="<c:out value="$(langCode}"/>">
und dann Lesenvar langCode = document.body.getAttribute('data-lang-code');
.InformationsquelleAutor bobince
Wenn Ihr javascript 'inline' mit dem rest von Ihrem JSP-Seite, dann verwenden Sie einfach die Technik vorgeschlagen, die von Kees de Kooter.
Wenn Ihr javascript muss in einer externen Datei (Für die Freigabe auf allen Seiten, zum Beispiel), dann einfach steckte es in seine eigene JSP-Datei.
Und so...
Können Sie dann unter "someMessage' und 'anotherMessage" innerhalb der Datei, die enthält die JSP -, oder aus einer javascript-Datei enthalten, die nach 'yourScript.jsp.
Beachten Sie die Verwendung der contentType-Attribut - Wert 'text/javascript' verhindert, dass der JSP-parser beschwert sich, dass die Ausgabe nicht wohlgeformtes XML - und dass der tage bezieht sich auf eine JSP-Datei.
Einer Kombination dieser Technik und vorgeschlagen, dass die von @Magner sollten Sie mitbringen, um eine vernünftige Lösung.
EDIT: Verändert das Beispiel für die Verwendung von 'text/javascript' statt 'text/plain' - Dank an @bobince für mich fest, dieser Fehler (obwohl 'text/plain' funktioniert, es ist richtiger zu verwenden, 'text/javascript'). Auch, wenn die Anzahl der strings, die müssen internationalisiert werden, ist klein, und/oder Sie zu rechtfertigen, dass Ihre 'Ressourcen' in mehr als einem Ort, eine für den server-side-Sachen und eine für die client-Seite stuff - @bobince die Technik der Verwendung von dynamic beinhaltet, ist ein guter.
InformationsquelleAutor belugabob
Ich würde vorschlagen, du schreibst ein servlet erzeugt ein array oder javascript-Objekt, das alles enthält lokalisierte Informationen, die Sie wünschen. Sie können Java resource-bundles, das geteilt werden kann, indem sowohl die client-und server-Seiten, dann brauchen Sie sich nicht zu vermischen JSP-code und Javascript-code, und die servlet-Antwort wird vom browser zwischengespeichert.
Erstellen Sie ein servlet, anzeigen es, zu einem Pfad, Lesen Sie das Gebietsschema aus einem request-parameter erzeugen dann den Javascript-code.
Verwenden Sie eine Zeile wie
<script src="/mydict?lang=en"></script>
dann laden Sie script danach
<script src="/myscript.js"></script>
InformationsquelleAutor BeWarned
Sollten Sie sich bemühen, Ihren javascript-code in einer separaten Datei von der jsp-code. Dies ist um browser-caching, einfachere Wartung, Wiederverwendung auf allen Seiten und zu ermöglichen Kompression.
Schlage ich vor, daß Sie erstellen Sie ein globales Objekt für text in der jsp verwendet werden können Ihre javascript-Dateien. Wie diese:
Später verwenden Sie es in Ihrem javascript:
InformationsquelleAutor Magnar
Können Sie das folgende tun. Speichern Sie die übersetzte Nachricht in einer Variablen, die gelöst werden können, die später in der JSP.
Dann machen die javascript-Datei qualifizieren, die als JSP-durch änderungen Ihre Standard-web.xml Datei. Dann die JS-Datei ist sowohl, javascript UND JSP. Die Endung der Datei ist einfach eine Erweiterung. Verwenden Sie, was Sie wollen. Funktioniert Super mit CSS-Dateien.
InformationsquelleAutor Kees de Kooter
Können Sie nicht verwenden-tags in JavaScript, aber es gibt einen workaround: Setzen Sie den tag in einer versteckten
DIV
(<div style="display: none;" id="msg"><fmt:...>
Nun kann man mit JS die
DIV
durch seine ID und Holen Sie sich dieinnerHTML
.Sagte, fmt ist nur ein wrapper für Java i18n-Funktionen, die Sie direkt verwenden können zwischen
<% %>
.InformationsquelleAutor Aaron Digulla
Wenn Sie sich nur für alert-Meldungen
nutzen Sie einfach diesen tag in Ihrem javascript -
Angenommen, Sie haben Folgendes in Ihrem Javascript:
Diese können internationalisiert werden, indem Sie hinzufügen
bean:message
- tag in den javascript -und fügen Sie
key
Wert in der property-DateiInformationsquelleAutor user3400486