Возможно ли встраивание Javascript в шаблонизатор Freemarker? - PullRequest
0 голосов
/ 30 апреля 2019

Можно ли выполнить встраивание Javascript для сложных объектов в шаблонном движке Freemarker, чтобы добиться того, что можно сделать в Thymeleaf? Например, как описано в Учебник Thymeleaf , если у нас был следующий код:

<script th:inline="javascript">
    var user = [[${session.user}]];
</script>

Выражение ${session.user} будет преобразовано в объект User, а Thymeleaf правильно преобразует его в синтаксис Javascript:

<script th:inline="javascript">
    var user = {'age':null,'firstName':'John','lastName':'Apricot',
                'name':'John Apricot','nationality':'Antarctica'};
</script>

Если есть аналогичная функция во Freemarker?

1 Ответ

1 голос
/ 01 мая 2019

Нет ничего особенного для этой цели. Вы можете сделать это, если хотите напечатать простую строку:

<script>
  var user = "${session.user?js_string}";
</script>

и аналогично var someNumber = ${session.someNumber?c}; для числа. Но нет встроенного решения для сброса составных объектов.

Мне было интересно, было бы хорошей идеей добавить ?json во FreeMarjer, который преобразует произвольный объект в JSON (также допустимый JavaScript), но это очень важно для безопасности. Вы выкидываете содержимое объекта рекурсивно в клиент ... Когда разработчики добавляют геттеры в класс, им не обязательно осознавать, что шаблон будет проходить через весь объектный граф, открывая его.

Но вы можете добавить метод к модели данных или в качестве совместно используемой переменной к синглтону Configuration, который это делает. var something = ${toJS(session.something)};. (Или на самом деле, #macro может сделать это тоже, но это уродливее и несколько медленнее.) Но подумайте, как вы будете держать в руках то, что выставлено клиенту.

...