Ответ 1
Согласно официальной документации:
<script th:inline="javascript">
/*<![CDATA[*/
var message = /*[[${message}]]*/ 'default';
console.log(message);
/*]]>*/
</script>
Я использую 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>
Согласно официальной документации:
<script th:inline="javascript">
/*<![CDATA[*/
var message = /*[[${message}]]*/ 'default';
console.log(message);
/*]]>*/
</script>
var message =/*[[${message}]]*/ 'defaultanyvalue';
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
Согласно документации есть несколько способов сделать врезку.
Правильный путь вы должны выбрать в зависимости от ситуации.
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, вызывающего внутри шаблона (я думаю, это невозможно).
УБЕДИТЕСЬ, что у вас уже есть 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>
Я видел, как это работает в дикой природе:
<input type="button" th:onclick="'javascript:getContactId(\'' + ${contact.id} + '\');'" />