Configuration d'une variable javascript à partir du modèle Spring à L'aide de Thymeleaf

Comment puis-je lire une variable de modèle à partir de Spring model et la configurer dans un Javascript?

Notez que j'utilise Thymeleaf comme moteur de modèle.

Côté ressort:

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

Côté Client:

<script>
    ....
    var m = ${message}; // not working
    alert(m);
    ...
</script>
65
demandé sur Mahozad 2014-09-05 18:08:15

6 réponses

De l'officiel la documentation:

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

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

/*]]>*/
</script>
130
répondu vdenotaris 2018-02-06 15:26:28
var message =/*[[${message}]]*/ 'defaultanyvalue';
15
répondu user5518390 2017-01-27 15:29:47

Thymeleaf 3 maintenant:

  • Affiche une constante:

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

    var message = [[${message}]];
    
  • Ou dans un commentaire valide code JavaScript lorsque vous ouvrez votre fichier de modèle de manière statique (sans l'exécuter sur un serveur).

    Thymeleaf appelle ceci: modèles naturels JavaScript

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

    Thymeleaf ignorera tout ce que nous avons écrit après le commentaire et avant le point-virgule.

Plus d'infos: http://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#javascript-inlining

7
répondu redochka 2017-11-10 22:57:16

Selon à la documentation Il y a plusieurs façons de faire l'inlining.
La bonne façon dont vous devez choisir en fonction de la situation.

1) Mettez simplement la variable du serveur au javascript:

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

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

/*]]>*/
</script>

2) combinez des variables javascript avec des variables côté serveur, par exemple vous devez créer un lien pour demander à l'intérieur du 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>

La seule situation que je ne peux pas résoudre - alors j'ai besoin de passer la variable javascript dans la méthode Java appeler à l'intérieur du modèle (c'est impossible je suppose).

6
répondu sanluck 2016-06-16 03:47:56
//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>
4
répondu Nitish Kanade 2018-01-18 11:25:48

J'ai vu ce genre de chose fonctionner dans la nature:

<input type="button"  th:onclick="'javascript:getContactId(\'' + ${contact.id} + '\');'" />
1
répondu Noumenon 2017-03-07 21:55:42