Thymeleaf kullanarak Spring modelinden bir JavaScript değişkeni kurma


113

Thymeleaf'i şablon motoru olarak kullanıyorum. Spring modelinden JavaScript değişkenine bir değişkeni nasıl geçiririm?

Yay tarafı:

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

İstemci tarafı:

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

Yanıtlar:


191

Resmi belgelere göre :

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

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

/*]]>*/
</script>


6
İyi çalışıyor, messages.properties dosyasından okumak da mümkün: var msg = [[# {msg}]];
Andrey

2
@szxnyc eğer /*<![CDATA[*/makroyu unutursanız onu alırsınız.
CodeMonkey

8
Ayrıca dikkat edin<script th:inline="javascript">
Grigory Kislin

1
@ MichałStochmal, harici javascript'in üstüne satır içi javascript yükleyebilir ve harici javascript'te aynı değişkenleri (satır içi javascript'te tanımlanan) kullanabilirsiniz.
Alfaz Jikani

20
var message =/*[[${message}]]*/ 'defaultanyvalue';

6
/ * * / İle içerilen [[]] arasında boşluk olmamasına dikkat edin.
jyu

1
Bunun defaultanyvalueyalnızca sayfayı statik olarak, yani bir web kapsayıcısının dışında çalıştırırken kullanılacağını belirtmek gerekir. Bir konteynerin içinde çalıştırılırsa ve değişken messagebildirilmemişse, sonuçta ortaya çıkan kaynak kodu şu olacaktırvar message = null;
Felipe Leão

3
th:inline="javascript"Komut dosyası etiketine eklemek de önemlidir .
redent84

15

Thymeleaf 3 şimdi:

  • Bir sabit göster:

    <script th: inline = "javascript">
    var MY_URL = /*[[${T(com.xyz.constants.Fruits).cheery}]]*/ "";
    </ Script>
    
  • Bir değişken görüntüleyin:

    var mesaj = [[$ {mesaj}]];
    
  • Veya bir yorumda, şablon dosyanızı statik bir şekilde açtığınızda (bir sunucuda çalıştırmadan) geçerli bir JavaScript koduna sahip olmak.

    Thymeleaf bunu şöyle adlandırır: JavaScript doğal şablonları

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

    Thymeleaf, yorumdan sonra ve noktalı virgülden önce yazdığımız her şeyi görmezden gelecektir.

Daha fazla bilgi: http://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#javascript-inlining


teşekkürler! size bir bira vermek istiyorum bu sözdizimini arıyordum var MY_URL = /*[[${T(com.xyz.constants.Fruits).cheery}]]*/ "";
Aung Aung

12

Belgelere göre satır içi yapmanın birkaç yolu vardır.
Duruma göre seçmeniz gereken doğru yol.

1) Değişkeni sunucudan javascript'e koyun:

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

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

/*]]>*/
</script>

2) Javascript değişkenlerini sunucu tarafı değişkenleriyle birleştirin, örneğin javascript içinde istekte bulunmak için bağlantı oluşturmanız gerekir:

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

Çözemediğim tek durum - o zaman javascript değişkenini şablonun içinden çağırarak Java yöntemine geçirmem gerekiyor (sanırım imkansız).


9

Zaten sayfada thymleaf bulunduğundan emin olun

//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>

6

Bu tür şeylerin vahşi doğada işe yaradığını gördüm:

<input type="button"  th:onclick="'javascript:getContactId(\'' + ${contact.id} + '\');'" />
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.