Параметризация встроенного freemarker
Можно ли параметризовать встроенную часть выражения в freemarker? Если так, то как?
Например, дату можно отформатировать с помощью следующих встроенных функций:
${openingTime?string.short}
${openingTime?string.medium}
${openingTime?string.long}
${openingTime?string.full}
Можно ли параметризовать встроенные имена string.short/string.medium/...?
Например, я хотел бы сделать что-то вроде:
${openingTime?${mydatefmt}}
где mydatefmt - это "string.short" или любой другой допустимый формат.
Это позволило бы легко изменить формат даты на странице бесплатного маркера.
Я хочу ограничить изменение страницей / файлом и не применять глобально.
Нужно ли что-то подобное помещать в макрос Freemarker, который может предвидеть все возможные типы форматов даты, которые могут понадобиться?
2 ответа
Вы должны указать шаблон форматирования явно: ${openingTime?string("yyyy-MM-dd HH:mm:ss zzzz")}
Формат даты может быть выражением, например: ${openingTime?string(mydatefmt)}
,
Один подход использует openingTime?string(pattern)
где pattern может быть любым видом выражения, которое вычисляется в строку. Но это довольно многословно и несколько медленно, так как скороговорка будет пересматриваться снова и снова.
Другой подход заключается в настройке date_format
, time_format
а также datetime_format
Настройки FreeMarker, а потом просто пиши ${openingTime}
, (На самом деле, если openingTime
не является javax.sql
подкласс java.util.Date
, ты должен написать ${openingTime?datetime}
потому что Java API не знает разницы между датой, временем и только датой, но это уже другая история. Настройки FreeMarker могут быть установлены глобально (лучше сказать, на Configuration
уровень), на уровне шаблона (но обычно вы этого не делаете) или на Environment
, См. http://freemarker.org/docs/pgui_config_settings.html. Последнее может быть сделано в FTL тоже, как с <#setting datetime_format = 'yyyy-MM-dd HH:mm:ss zzzz'>
,