Параметризация встроенного 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'>,

Другие вопросы по тегам