2010-11-08 5 views
7

Est-il possible d'utiliser jstl dans javascript?jstl inside javascript

j'attache à mettre <c:set var="abc" value="yes"/>

puis accéder à plus tard cette valeur en html et exécuter du code. Mon problème est que c: set s'exécute toujours même si la condition javascript est fausse.

<script type="text/javascript"> 
var v1 = false; 
<c:set var"abc" value="yes"/> 

if(v1){ 
    <c:set var"abc" value="no"/> 
} 
</script> 

Dans le code ci-dessus, même si v1 est faux, 'non' est réglé sur abc.

+2

Lire ceci: http://balusc.blogspot.com/2009/05/javajspjsf-and-javascript.html Au point: Java/JSP/JSTL/EL fonctionne au serveur Web et produit HTML/CSS/JS. Webserver envoie HTML/CSS/JS à webbrowser. Webbrowser récupère HTML/CSS/JS et l'exécute. Si Java a bien exécuté sa tâche, le navigateur Web ne devrait avoir récupéré aucune ligne de code Java/JSP/JSTL/EL. Simplement parce qu'il ne le comprend pas. – BalusC

+0

c'était un joli blog ... – coder247

Répondre

18

Il n'y a aucune signification à l'idée d'être "à l'intérieur de Javascript" quand vous parlez de l'interprétation JSP côté serveur. Il n'y a tout simplement pas de Javascript en ce qui concerne ce domaine.

Ainsi, oui, il est possible, si vous voulez dire que vous voulez faire quelque chose comme

var something = '${abc}'; 

Notez que vous devez être prudent avec les guillemets et des caractères spéciaux. La fonction JSTL fn:escapeXml() est inutile lorsque vous interpolez une variable JSP dans une partie de la page qui sera interprétée comme source Javascript par le navigateur. Vous pouvez utiliser une bibliothèque JSON pour encoder vos chaînes, ou vous pouvez écrire votre propre fonction EL pour le faire.

4

Ceci est un thread assez ancien, mais c'est celui que j'ai rencontré lorsque j'ai eu le même problème. Puisque j'ai moi-même pensé à une solution, je l'afficherai ici au cas où cela aiderait quelqu'un dans le futur.

Le fichier html (ou jsp) recherche le texte dans le fichier externe déclaré comme source javascript. Tomcat (ou similaire) interprète uniquement les balises JSTL dans les fichiers avec l'extension .jsp (ou peut-être d'autres, mais cela n'a pas d'importance pour cette réponse).

, renommez votre fichier .js pour lui donner une extension .jsp (javascript.js à javascript_js.jsp par exemple)

Ajouter ces lignes en haut de javascript_js.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 

et laissez simplement le code inchangé.

De toute évidence, vous devez également ajouter plus de préfixes si vous utilisez autre chose que c: dans l'en-tête. Si vous utilisez Eclipse (ne connaissez pas les autres IDE), il supposera qu'il ne s'agit pas d'un fichier javascript et que vous perdez le jeu de couleurs pour les différents mots-clés (var, fonction et ainsi de suite), var name auto completion et l'indentation automatique.

Pour tromper l'EDI, vous pouvez ajouter

// <script> 

comme commentaire js, avant le code réel (après les déclarations "<% de @"), et

// </script> 

à la fin du fichier, encore comme un commentaire de js.

Cela a fonctionné pour moi.

3
<script> 
    <c:set var="myVal" value="Hello"/> 

    var val1="${myVal}"; 

</script>