#javascript #json #thymeleaf
#javascript #json #thymeleaf
Вопрос:
В контроллер я поместил простой java-объект, сопоставленный с JSON с помощью jackson.
Station station = stationRepo.findFirstByCodeEquals(320007);
ObjectMapper objectMapper = new ObjectMapper();
String JSONstation = objectMapper.writeValueAsString(station);
model.addAttribute("station",JSONstation);
Во внешнем интерфейсе я использую Thymeleaf для получения этого объекта в теге:
<p id="test" th:text="${station}">Test 1</p>
<p id="test2">Test 2</p>
<p id="test3">Test 3</p>
И я просто получаю этот объект JSON в javascript, используя document.getElementById («test»).innerText, и анализирую его в объект js.
var JSONtest = "[[${station}]]";
var JSONstation = document.getElementById("test").innerText;
document.getElementById("test2").innerHTML = typeof JSONtest;
var jsStation = JSON.parse(JSONstation);
document.getElementById("test3").innerHTML = JSONtest.rusName;
Но когда я пытаюсь получить объект JSON из thymeleaf, используя var JSONtest = «[[${station}]]», я не могу разобрать его в объект js, но они одинаковы.
Что я делаю не так в этом коде?
Комментарии:
1. Я думаю, вы имели в виду
var JSONtest = `[[${station}]]`;
— вам нужно заключить строку в обратные метки, чтобы использовать${..}
синтаксис интерполяции
Ответ №1:
Когда вы используете переменные Thymeleaf в JavaScript, вы не должны передавать их как String
. Вместо этого вы должны добавить переменную в модель, как обычно:
model.addAttribute("station", station);
и пусть Thymeleaf автоматически переведет его на JavaScript (он обработает перевод вашего объекта в JSON, вам не нужно использовать Jackson):
<script th:inline="javascript">
var JSONtest = /*[[${station}]]*/ {};
</script>
Комментарии:
1. Отлично, это проще, чем я думал. Я просто прохожу через такую конструкцию, потому что я думал, что это закомментированный блок кода.