参数化内置的freemarker

时间:2013-01-12 01:14:07

标签: freemarker built-in

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

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

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

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

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

${openingTime?${mydatefmt}}

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

这样就可以轻松更改自由标记页面上的日期格式。

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

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

2 个答案:

答案 0 :(得分:2)

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

另一种方法是设置date_formattime_formatdatetime_format FreeMarker设置,然后只写${openingTime}。 (实际上,如果openingTime不是javax.sql的{​​{1}}子类,则必须编写java.util.Date,因为Java API不知道差异日期时间,仅限时间和日期,但这是另一个故事。)FreeMarker设置可以全局设置(更好地说,在${openingTime?datetime} - 级别上),在模板级别(但通常不这样做),或者Configuration。见http://freemarker.org/docs/pgui_config_settings.html。最后一个也可以在FTL中完成,就像Environment一样。

答案 1 :(得分:1)

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

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