2014-09-05 7 views
49

Come posso leggere una variabile del modello dal modello Spring e impostarla in un Javascript?Impostazione di una variabile javascript dal modello Spring usando Thymeleaf

Nota che sto utilizzando Thymeleaf come motore di template.

Primavera-side:

@RequestMapping(value = "message", method = RequestMethod.GET) 
    public String messages(Model model) { 
      model.addAttribute("message", "hello"); 
      return "index"; 
    } 

lato client:

<script> 
    .... 
    var m = ${message}; // not working 
    alert(m); 
    ... 
    </script> 

risposta

105

dalla Gazzetta documentation:

<script th:inline="javascript"> 
/*<![CDATA[*/ 

    var message = /*[[${message}]]*/ 'default'; 
    console.log(message); 

/*]]>*/ 
</script> 
+1

Non funziona ... javascript errore non rilevato errore di sintassi – szxnyc

+2

funziona bene, anche possibile leggere da messages.properties: var msg = [[# {msg }]]; – Andrey

+0

funziona bene anche per me. – asifaftab87

12
var message =/*[[${message}]]*/ 'defaultanyvalue'; 
+3

Notate che NON dovrebbe esserci spazio tra/* */e il contenuto [[]]. – jyu

+1

Vale la pena notare che "defaultanyvalue" verrà utilizzato solo quando si esegue la pagina staticamente, ad esempio all'esterno di un contenitore Web. Se è stato eseguito all'interno di un contenitore e la variabile 'message' non è stata dichiarata, il codice sorgente risultante sarà' var message = null; ' –

3

Secondo to the documentation ci sono diversi modi per eseguire l'inlining.
Il modo giusto è necessario scegliere in base alla situazione.

1) In poche parole la variabile da server a javascript:

<script th:inline="javascript"> 
/*<![CDATA[*/ 

var message = [[${message}]]; 
alert(message); 

/*]]>*/ 
</script> 

2) Unire javascript variabili con le variabili lato server, ad esempio è necessario creare il collegamento per la richiesta all'interno del javascript:

<script th:inline="javascript"> 
     /*<![CDATA[*/ 
     function sampleGetByJquery(v) { 
      /*[+ 
      var url = [[@{/my/get/url(var1=${#httpServletRequest.getParameter('var1')})}]] 
         + "&var2="+v; 
      +]*/ 
      $("#myPanel").load(url, function() {}); 
     } 
     /*]]>*/ 
     </script> 

Quella situazione non posso risolvere - poi ho bisogno di passare javascript variabile all'interno del metodo Java chiamando all'interno del template (è impossibile credo) .

1

Ho visto questo tipo di lavoro cosa in natura:

<input type="button" th:onclick="'javascript:getContactId(\'' + ${contact.id} + '\');'" /> 
3

Thymeleaf 3 ora:

  • display una costante:

     
    <script th:inline="javascript"> 
    var MY_URL = /*[[${T(com.xyz.constants.Fruits).cheery}]]*/ ""; 
    </script> 
    
  • visualizzare una variabile :

     
    var message = [[${message}]]; 
    
  • Oppure in un commento per avere un codice JavaScript valido quando si apre il file del modello in modo statico (senza eseguirlo su un server).

    Thymeleaf chiama questo: JavaScript modelli naturali

     
    var message = /*[[${message}]]*/ ""; 
    

    Thymeleaf ignorerà tutto ciò che abbiamo scritto dopo il commento e prima del punto e virgola.

Maggiori informazioni: http://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#javascript-inlining

1
//Use this in java 
@Controller 
@RequestMapping("/showingTymleafTextInJavaScript") 
public String thankYou(Model model){ 
model.addAttribute("showTextFromJavaController","dummy text"); 
return "showingTymleafTextInJavaScript"; 
} 


//thymleaf page javascript page 
<script> 
var showtext = "[[${showTextFromJavaController}]]"; 
console.log(showtext); 
</script>