Come sfuggire JavaScript in JSP?

Sono totalmente bloccato su questo, sto cercando di sfuggire a una singola citazione in un JSP. Ho alcuni dati che sto trasmettendo direttamente in una stringa JS e le singole virgolette sembrano causare problemi.

Ecco il mio codice:

    var itemNameList ='    ${fn:replace(Desc, "'", "\\/'")}   ';  

Ed ecco l’output che sto ottenendo:

 var itemNameList =' Weyland Estate Santa Barbara Pinot Noir Raymond \/'Prodigal\/' North Coast Cabernet Sauvignon Chateau Haute Tuque'; 

Ma questo è sbagliato, e ho solo bisogno di /'Prodigal'/ o nessuna virgoletta singola!


EDIT : O in realtà ho bisogno di sfuggire alle virgolette con \ backward slash?

La barra diretta non è un carattere di escape. Questa è la barra retroversa.

 ${fn:replace(Desc, "'", "\\'")} 

(sì, è stato presentato due volte, perché è anche un personaggio di escape in Java!)

Tuttavia, non devi solo ripubblicare ' per \' , devi anche sostituire \n (newlines) di \\n . La stringa è stata stampata su più righe, il che lo rende anche una variabile stringa JS non valida. Il tuo risultato finale deve fondamentalmente assomigliare a questo:

 var itemNameList = '' + '\nWeyland Estate Santa Barbara Pinot Noir' + '\nRaymond \'Prodigal\' North Coast Cabernet Sauvignon' + '\nChateau Haute Tuque'; 

(tieni presente che l’evidenziatore della syntax è d’accordo su di me qui, ma non sul tuo)

Ci sono tuttavia molti più caratteri speciali che devono essere sfuggiti. Sono tutti coperti da Apache Commons Lang StringEscapeUtils#escapeEcmaScript() . Molto più semplice è creare una funzione EL personalizzata che chiama esattamente quel metodo. Se non ancora fatto, scaricare e rilasciare commons-lang.jar in /WEB-INF/lib . Quindi creare un file /WEB-INF/functions.tld come segue:

 < ?xml version="1.0" encoding="UTF-8" ?>  Custom Functions 1.0 http://example.com/functions  escapeJS org.apache.commons.lang3.StringEscapeUtils java.lang.String escapeEcmaScript(java.lang.String)   

In modo che tu possa usarlo come segue:

 < %@taglib prefix="util" uri="http://example.com/functions" %> ... ${util:escapeJS(Desc)}