Je souhaite utiliser la balise fmt de JSTL en JavaScript pour localiser mes messages d'alerte. Mon fichier JavaScript est un fichier autonome et lorsque j'inclus fmt tag dans js, l'explorateur de fichiers donne des erreurs JavaScript. Est-il possible de traiter le fichier .js
en tant que fichiers .jsp
en utilisant la configuration web.xml? Quelqu'un peut-il suggérer comment je peux faire cela?Utilisation du code JSP en JavaScript
Répondre
Vous pouvez effectuer les opérations suivantes. Vous stockez le message traduit dans une variable qui peut être résolue plus tard dans la JSP.
<fmt:message key="your.alert" var="theAlert"/>
<script type="text/javascript">
alert("${theAlert}");
</script>
Vous ne pouvez pas utiliser des balises en JavaScript, mais il existe une solution: mettre le tag dans un DIV
caché (<div style="display: none;" id="msg"><fmt:...>
Maintenant, vous pouvez utiliser JS pour rechercher le DIV
par son ID et obtenir le innerHTML
.
Cela dit, fmt est juste un wrapper pour les fonctions i18n de Java que vous pouvez utiliser directement entre <% %>
.
vous devez vous efforcer de garder votre javascript code dans un fichier séparé du code jsp. Ceci permet d'obtenir une mise en cache du navigateur, une maintenance plus facile, une réutilisation sur plusieurs pages et d'autoriser la compression.
Je vous suggère de créer un objet global pour le texte dans le fichier jsp, qui sera utilisé par vos fichiers javascript. Comme ceci:
<script>
var text = text || {}; // play well with other jsps on the page
text.this_page_name = {
required_field_error: "<fmt:message key="required.field.error"/>",
system_error: "<fmt:message key="system.error"/>"
};
</script>
Plus tard, vous l'utilisez dans votre javascript:
alert(text.this_page_name.required_field_error);
Si votre javascript est 'en ligne' avec le reste de votre page JSP, puis il suffit d'utiliser la technique proposée par Kees de Kooter .
Si votre javascript doit être dans un fichier externe (pour un partage sur plusieurs pages, par exemple), placez-le simplement dans son propre fichier JSP.
<%@page contentType="text/javascript" %>
<fmt:message key="some.message" var="someMessage"/>"
<fmt:message key="another.message" var="anotherMessage"/>"
var someMessage = "${someMessage}"
var anotherMessage = "${anotherMessage}"/>"
et l'inclure comme ça ...
<script src="yourScript.jsp" language="JavaScript" type="text/javascript"></script>
Vous pouvez alors se référer à « someMessage » et « anotherMessage » à partir du fichier qui inclut le JSP, ou de tout fichier javascript qui est inclus après 'yourScript.jsp. Notez que l'utilisation de l'attribut contentType - 'text/javascript' empêche l'analyseur JSP de se plaindre que la sortie n'est pas bien formée XML - et que le tage fait référence à un fichier JSP.
Une combinaison de cette technique et celle suggérée par @Magner devrait vous apporter une solution raisonnable.
EDIT: Changé l'exemple pour utiliser 'text/javascript' de 'text/plain' - merci à @bobince pour m'avoir fait réaliser cette erreur (même si 'text/plain' fonctionne, c'est plus correct à utiliser ' text/javascript '). Aussi, si le nombre de chaînes qui doivent être internationalisées est petit, et/ou vous pouvez justifier avoir vos «ressources» dans plus d'un endroit - un pour les trucs côté serveur et un autre pour les trucs côté client - la technique de Bobince @ L'utilisation d'inclusions dynamiques est une bonne chose.
Est-il possible de traiter le fichier .js comme fichier .jsp en utilisant la configuration web.xml?
Oui:
<servlet>
<servlet-name>scriptjsp</servlet-name>
<jsp-file>/script.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>scriptjsp</servlet-name>
<url-pattern>/script.js</url-pattern>
</servlet-mapping>
Mais, il n'y a aucun avantage réel à faire cela, parce que les fichiers JavaScript ne doivent pas avoir des URL se terminant par « .js ». Ce qui détermine si un fichier est un fichier JavaScript est le type de média MIME utilisé. Vous pouvez définir ceci à partir de JSP en utilisant:
<%@ page contentType="text/javascript" %>
en haut. Ensuite, vous pouvez accéder directement à:
<script type="text/javascript" src="/script.jsp"></script>
(En plus: dans les navigateurs actuels, les scripts liés à la balise de script <> fonctionnera même sans avoir le type de contenu bien défini, mais c'est probablement pas quelque chose à compter sur .)
Je veux utiliser la balise fmt de JSTL en javascript
Ceci est probablement pas une bonne idée. La balise fmt traite de l'échappement HTML pour les caractères, mais ce que vous voulez, c'est l'échappement de la chaîne de caractères JavaScript, par exemple pour éviter les caractères de guillemets. JSTL ne fournit pas cette fonctionnalité. Vous obtiendrez des caractères '& ampli' inattendus; les caractères apparaissant dans vos chaînes JavaScript, et l'utilisation d'une apostrophe ou d'une double citation dans les messages briseront l'ensemble du script. De plus, la prise en charge des scripts généralement inclus dans JSP risque de compromettre les performances et la mise en cache.
Je suggère un système de recherche de langue indépendant en JavaScript. Par exemple, inclure un script externe par langue:
var msg= {
messageName: 'Message in English',
...
};
Puis rechercher: et dans ce fichier définir une recherche comme
<script type="text/javascript" src="/script/lang/en.js"></script>
(vous voulez changer « en » pour correspondre selon la langue) msg.messageName
pour chaque chaîne localisable dans le script.
merci pour l'explication. Il est posté en arrière, je me demande si je peux demander comment charger le fichier js de la langue spécifique dans le jsp? c'est-à-dire si j'obtiens les paramètres régionaux et que je souhaite charger uniquement les js correspondants dans le fichier jsp afin que l'objet msg puisse être utilisé dans un autre fichier javascript? lang_xx.js pourrait être lang_en.js ou lang_fr.js – lannyf
Vous voulez dire . js ">'? – bobince
merci bobince. cela fonctionnerait-il: dans un bloc de script précédent faire: puis dans la section de script suivante: . js ">. Je ne suis pas sûr dans JSP comment référencer le var défini dans un autre bloc de script si dans certains cas il le faut. – lannyf
Je vous suggère d'écrire une servlet qui génère un objet tableau ou javascript qui contient toutes les informations localisées que vous désirez. Vous pouvez utiliser des groupes de ressources Java qui peuvent être partagés par les côtés client et serveur, sans avoir à mélanger le code JSP et le code Javascript, et la réponse de la servlet sera mise en cache par le navigateur.
Créez une servlet, mappez-la sur un chemin, faites-la lire les paramètres régionaux à partir d'un paramètre de requête, puis générez le code Javascript.
Utilisez une ligne comme <script src="/mydict?lang=en"></script>
alors vous créez un script après <script src="/myscript.js"></script>
Ceci est une bonne solution, devrait être classé plus haut. –
charge Si vous allez pour seulement des messages d'alerte il suffit d'utiliser cette balise dans votre javascript
Supposons que vous avez ci-dessous dans votre Javascript:
alert("Confirm Deletion");
Ceci peut être internationalisé en ajoutant bean:message
tag dans votre javascript
alert('<bean:message key="msg.confirm"/>');
et ajouter de la valeur key
dans le fichier de propriété
msg.delete=Confirm Deletion
- 1. JavaScript & JSP
- 2. Comment exécuter du code JavaScript en séquence?
- 3. Javascript dans JSP
- 4. Aide HTML/JSP/JAVASCRIPT
- 5. Reformatage du code JavaScript/JScript?
- 6. Utilisation du symbole Euro en JavaScript et PHP
- 7. Objets JSP, JavaScript et Java
- 8. Code de déconnexion dans JSP
- 9. Convertir le code JavaScript en code VBScript?
- 10. Comment sortir le code HTML du bloc JSP <%! ... %>?
- 11. Utilisation du code C++ Borland dans VC++
- 12. Utilisation d'expressions rationnelles dans JSP EL
- 13. appel code PHP page JSP
- 14. Mettre du code HTML dans un iframe (en utilisant javascript)
- 15. Obtenir du code entre guillemets avec regexp en javascript
- 16. Utilisation d'une variable globale en javascript
- 17. Utilisation d'un bean jsp dans une session
- 18. Charger le code javascript après le chargement du code derrière
- 19. Affichage de l'image en code HTML et JSP
- 20. Pouvez-vous obtenir le nom du fichier jsp en utilisant un taglib dans le code taglib
- 21. javascript setTimeOut fonction dans un jsp
- 22. Outils d'évaluation de code Javascript en ligne
- 23. Utilisation d'un extrait de code HTML pour un modèle en JavaScript (jQuery)
- 24. code JSP Struts ou tag JSTL
- 25. Importation de JavaScript dans les balises JSP
- 26. Comment transférer un tableau Java en tableau javaScript en utilisant jsp?
- 27. Utilisation de javascript pour définir la valeur du champ masqué puis accéder à la valeur du serveur C# code
- 28. jetty diplays le code des fichiers jsp
- 29. Date et heure du client JSP
- 30. Utilisation du cryptage AES en C#
Cela exige que vous en ligne tout votre javascript. Le javascript devrait vraiment être séparé dans son propre fichier, pour la mise en cache du navigateur, une maintenance plus facile, une réutilisation sur plusieurs pages et pour permettre la compression. – Magnar
Ensuite, faites en sorte que le fichier javascript soit considéré comme JSP en modifiant votre fichier web.xml par défaut. Ensuite, le fichier JS est à la fois, javascript et JSP. L'extension de fichier est simplement cela, une extension. Utilisez ce que vous voulez. Fonctionne très bien avec les fichiers CSS. –