2010-06-24 7 views
1

en essayant de mettre un chemin de fichier en javascript. il est une douleur \ est un caractère d'échappement et tuer toujours le caractère après la barre oblique inverseChemin du fichier sur JSP et javascript

ce que je fais est ce je suis en train d'ajouter le chemin du fichier à partir d'un attribut d'objet vue jsp

window.open("file"+<c:out value="${filePath}" />+fileName); 

mais s'il y a antislash à la fin de filePath, il tue le guillemet suivant

quelle est la solution la plus efficace. dois-je changer la notation d'attribut de Java (que je ne veux pas) ou obtenir un manuscrit pour le faire?

+0

le code js est window.open ("fichier" + + nomFichier); – nokheat

+0

D'où vient la valeur de 'filePath'? Je suppose que c'est quelque chose que l'utilisateur soumet avec un formulaire? –

+0

il est du contrôleur de ressort derrière. il renvoie la valeur de filePath sous la forme \ report2 \ cola, et la valeur est déjà échappée pour l'affichage html. – nokheat

Répondre

1

Utilisez / au lieu de \. Le / fonctionne aussi bien dans Windows. Vous pouvez utiliser fn:replace() pour le remplacer.

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 
... 
window.open("file${fn:replace(filePath, '\\', '/')}" + fileName); 

Notez que j'ai également corrigé la "concaténation de chaîne". Concaténer c:out dans le style Javascript n'a aucun sens.

1

Le codage JavaScript est requis ici parce que la balise c: out exécute le codage HTML au moins pour certains caractères méta, mais pas pour le codage JavaScript. Dans ce cas, le codage JavaScript de la sortie est requis, car la sortie de la balise c: out apparaît dans un contexte JavaScript.

Remarque: Vous pouvez utiliser ESAPI pour cela, via la classe JavaScriptCodec. Cela vous protégerait aussi de XSS si possible via la variable filePath.