1

freemarker中表达式的内置部分可以参数化吗?如果是这样,怎么做?

例如,可以使用以下内置函数格式化日期:

${openingTime?string.short}
${openingTime?string.medium}
${openingTime?string.long}
${openingTime?string.full}

string.short/string.medium/... 内置名称也可以参数化吗?

例如,我想做类似的事情:

${openingTime?${mydatefmt}}

其中 mydatefmt 是 'string.short' 或任何有效格式。

这样就可以轻松地更改 freemarker 页面上的日期格式。

我想将更改限制为页面/文件,而不是全局应用。

是否需要将类似的内容放入可能预测可能需要的所有可能类型的日期格式的 Freemarker 宏中?

4

2 回答 2

2

一种方法是使用openingTime?string(pattern),其中 pattern 可以是任何类型的计算结果为字符串的表达式。但它非常冗长且有点慢,因为模式将一次又一次地重新解析。

另一种方法是设置date_format,time_formatdatetime_formatFreeMarker 设置,然后只写${openingTime}. (实际上,如果openingTime不是 的javax.sql子类java.util.Date,则必须编写${openingTime?datetime},因为 Java API 不知道 date-time、time 和 date-only 的区别,但这是另一回事。) FreeMarker 设置可以全局设置(更好的说法是,在Configuration级别上),在模板级别上(但你通常不这样做),或者在Environment. 请参阅http://freemarker.org/docs/pgui_config_settings.html。最后一个也可以在 FTL 中完成,例如<#setting datetime_format = 'yyyy-MM-dd HH:mm:ss zzzz'>.

于 2013-01-12T13:26:59.287 回答
1

您必须明确指定格式模式:${openingTime?string("yyyy-MM-dd HH:mm:ss zzzz")}

日期格式可以是表达式,例如 : ${openingTime?string(mydatefmt)}

于 2013-01-12T08:05:23.273 回答