Подвергать всю модель данных Freemarker воздействию JavaScript?
Мне интересно, есть ли простой способ предоставить всю модель данных шаблона Freemarker JavaScript, предпочтительно преобразовав ее в литерал объекта JS где-то по пути.
Я знаю, как перебирать ключи:
<#list .data_model?keys as key>
</#list>
И предположительно я мог бы построить глобальную переменную JS в шаблоне как таковую?
2 ответа:
Вы можете пройти всю модель данных с помощью FreeMarker, а затем создать "исходный код" для соответствующего объекта JSON, но вам придется иметь дело с такими вещами, как экранирование строк (например, с js_string builtin) и потенциально большими (рекурсивными) графами объектов.
Несколько лет назад я написал общую модель данных "dumper", которая печатает хорошее древовидное представление модели данных FreeMarker. Возможно, это не совсем то, что вам нужно, но, возможно, это вдохновение. Вы можете найти его здесь .
Вы также можете просто использовать Jackson или любой другой JSON api для преобразования объекта в json, а затем добавить строку json в модель.
Пример использования spring MVC:
@RequestMapping(value = "/test", method = RequestMethod.GET) public ModelAndView test() throws Exception { String output = new ObjectMapper().writer().withDefaultPrettyPrinter().writeValueAsString(new HashMap<String, Object>()); Map<String, Object> model = new HashMap<>(); model.put("result", output); return new ModelAndView("page", "model", model); }
В freemarker
${Модель.результат}