Подвергать всю модель данных Freemarker воздействию JavaScript?


Мне интересно, есть ли простой способ предоставить всю модель данных шаблона Freemarker JavaScript, предпочтительно преобразовав ее в литерал объекта JS где-то по пути.

Я знаю, как перебирать ключи:

  <#list .data_model?keys as key>
  </#list>

И предположительно я мог бы построить глобальную переменную JS в шаблоне как таковую?

2 2

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

${Модель.результат}