2015-04-19 10 views
12

In specificoThymeleaf stampa JSON stringa come oggetto JSON in un javascript variabile

ho bisogno di un modo per stampare JSON rappresentazione di un valore stringa nella pagina HTML tramite thymeleaf.

In dettaglio

Sto avendo un model attribute che contiene una stringa che è in realtà una rappresentazione di stringa del JSON

Il mio codice thymeleaf

<script th:inline="javascript"> 
    var value = [[${data.scriptValue}]]; 
</script> 

stampa la variabile come di seguito

var value = '[[\"asd\",\"3\"],[\"asd\",\"1\"],[\"asdasd\",\"1\"]]'; 

Ma io voglio qualcosa di simile a questo come un array di javascript/JSON

var value = [["asd","3"],["asd","1"],["asdasd","1"]]; 

Come fare questo in thymeleaf?


Nota: So che posso fare questo da JSON.Parse ma ho bisogno di un modo per fare questo da thymeleaf :)

+0

penso che questo http://stackoverflow.com/questions/28633329/how-to-serialize-pojo-with-thymeleaf/28691655#28691655 e questo http://forum.thymeleaf.org/Spring-Javascript -e-escaped-JSON-td4024739.html aiuterebbe –

+0

Grazie @PatrickLC In realtà sto facendo questo al momento come ho menzionato nella domanda. Ma non sarebbe bello avere un metodo diretto in thymeleaf per fare questo come 'th: utext' :) –

+1

Sono d'accordo che sarebbe qualcosa di utile, potresti trovare due problemi correlati: https://github.com/thymeleaf/thymeleaf/issues/12 e https://github.com/thymeleaf/thymeleaf/issues/81 –

risposta

10

Update - 2015/12/24

Questa funzione è disponibile in Thymeleaf 3

consultare The Thymeleaf textual syntax in https://github.com/thymeleaf/thymeleaf/issues/395

// Unescaped (actual answer) 
var value = [(${data.scriptValue})]; 
//or 
var value = [# th:utext="${data.scriptValue}"/]; 

// Escaped 
var value = [[${data.scriptValue}]]; 
//or 
var value = [# th:text="${data.scriptValue}"/]; 

Non è possibile al Thymeleaf 2. Come detto Patric LC, ci sono due problemi segnalati per questo.

  1. unescaped inline for scripts/css #12

  2. Use Jackson for Javascript inlining of JSON #81

2

@Faraj, nuova versione del Thymeleaf fornisce questa funzionalità. Implementano funzionalità per i problemi che hai menzionato. Potete guardare qui: http://www.thymeleaf.org/doc/articles/thymeleaf3migration.html

Le caratteristiche principali: modalità template

  • Tre testuali: testi, JavaScript e CSS.
  • Nuova sintassi per gli elementi nelle modalità modello testuale: [# ...] ... [/].
  • Sono consentite le espressioni di uscita in linea consentite, entrambe con escape ([[...]]) e senza escape ([(...)]).
  • Fuga intelligente di JavaScript (come valori letterali) e CSS (come identificatori).
  • Parser livello (/*[- ... -]*/) e blocchi di commento solo prototipo (/*[+ ... +]*/).
  • Modelli naturali applicati a script JAVASCRIPT e fogli di stile CSS mediante elementi di avvolgimento e/o espressioni di output all'interno dei commenti (/*[# ...]*/).
+0

grazie per averlo indicato. :) –