2012-03-16 11 views
11

Esiste un modo semplice per evitare che una stringa venga utilizzata come stringa JavaScript in una vista in Play 2.0? Ad esempio, ecco una semplice visione che crea un legame con una scatola di conferma in onclick:Escape una stringa JavaScript nella vista Play 2.0?

@(text:String,link:Call,message:String) 
<a href="@link" onclick="return confirm('@message');">@text</a> 

che fallirà se ci sono a capo o apici in un messaggio. Qual'è il miglior modo per farlo?

risposta

13

È possibile utilizzare Apache Commons Lang:

@(text:String, link:Call, message:String) 

@import org.apache.commons.lang3.StringEscapeUtils.escapeEcmaScript 
<a href="@link" onclick="return confirm('@escapeEcmaScript(message)');">@text</a> 

si può evitare l'importazione esplicita nel modello con l'aggiunta al file project/Build.scala:

templatesImport += "org.apache.commons.lang3.StringEscapeUtils.escapeEcmaScript" 
+0

Grazie per la soluzione. :) Sto usando Play 2.1 e la libreria inclusa di default è 'apache-commons-lang3'. Ho aggiunto 'org.apache.commons.lang3.StringEscapeUtils.escapeEcmaScript' a' Build.scala' e ho usato 'escapeEcmaScript' nei miei template invece di' escapeJavaScript' –

+0

OK, ho modificato la mia risposta. –

+0

È possibile combinare questo con l'html di escape di 'play'' @Html (messaggio) '? '@escapeEcmaScript (Html ​​(message))' - non funziona – Dfr

Problemi correlati