Подтвердить что ты не робот

Настройка переменной JavaScript из модели Spring с помощью Thymeleaf

Я использую Thymeleaf в качестве шаблонного движка. Как передать переменную из модели Spring в переменную JavaScript?

Пружинная сторона:

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

Сторона клиента:

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

Ответ 1

Согласно официальной документации:

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

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

/*]]>*/
</script>

Ответ 2

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

Ответ 3

Thymeleaf 3 сейчас:

  • Показать константу:

    <script th:inline="javascript">
    var MY_URL = /*[[${T(com.xyz.constants.Fruits).cheery}]]*/ "";
    </script>
    
  • Показать переменную:

    var message = [[${message}]];
    
  • Или в комментарии, чтобы иметь действительный код JavaScript, когда вы открываете файл шаблона в статической манере (без выполнения его на сервере).

    Thymeleaf вызывает это: JavaScript естественные шаблоны

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

    Thymeleaf будет игнорировать все, что мы написали после комментария и перед точкой с запятой.

Дополнительная информация: http://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#javascript-inlining

Ответ 4

Согласно документации есть несколько способов сделать врезку.
Правильный путь вы должны выбрать в зависимости от ситуации.

1) Просто поместите переменную с сервера в javascript:

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

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

/*]]>*/
</script>

2) Объедините переменные javascript с переменными на стороне сервера, например, вам нужно создать ссылку для запроса внутри 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>

Единственная ситуация, которую я не могу разрешить - тогда мне нужно передать переменную javascript внутри метода Java, вызывающего внутри шаблона (я думаю, это невозможно).

Ответ 5

УБЕДИТЕСЬ, что у вас уже есть thymleaf на странице

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

Я видел, как это работает в дикой природе:

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