Ошибка Freemarker Ожидаемый хеш? - PullRequest
0 голосов
/ 17 мая 2018

Я хочу преобразовать мгновенное время в дату, но я получаю эту ошибку:

freemarker.template.TemplateException: ожидаемый хеш. Вместо этого newDate оценивается как freemarker.template.SimpleDate

Я делаю это на Java:

Date newDate = new Date();
Instant instant =  Instant.now();

webContext.put("newDate",new Date());
webContext.put("instant",instant);

И я делаю это на Freemarker:

[#assign dateFormated = newDate.getAsDate().from(instant.ofEpochSecond(data.time.seconds))/]

Спасибо

1 Ответ

0 голосов
/ 18 мая 2018

Шаблоны FreeMarker, как правило, не предоставляют API-интерфейсы Java и не позволяют вам получать доступ к классам Java по имени.Я имею в виду, что в некоторых случаях это так, но не в целом, например, newDate не имеет субвариабельных переменных (например, getAsDate) во FreeMarker.Существуют утилиты, с помощью которых вы можете предоставлять статические методы классов, например:

TemplateHashModel staticModels
        = ((BeansWrapper) configuration.getObjectWrapper())
          .getStaticModels();
webContext.put("Date", staticModels.get("java.util.Date"));
webContext.put("Instant", staticModels.get("java.time.Instant"));

, где configuration - ваш freemarker.template.Configuration синглтон.На самом деле, вы можете добавить Date и Instant к этому синглтону с помощью Configuration.setSharedVariable, один раз, когда вы настраиваете FreeMarker.

И затем вы можете записать Date.from(Instant.now()) в шаблон, потому что теперь есть Date и Instant, и вы специально указали FreeMarker выставить свои статические методы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...