freemarker中表达式的内置部分可以参数化吗? 如果是这样,怎么样?
例如,可以使用以下内置格式化日期:
${openingTime?string.short}
${openingTime?string.medium}
${openingTime?string.long}
${openingTime?string.full}
string.short / string.medium / ...内置名称也可以参数化吗?
例如,我想做类似的事情:
${openingTime?${mydatefmt}}
其中mydatefmt是'string.short'或任何有效格式。
这样就可以轻松更改自由标记页面上的日期格式。
我想将更改限制为页面/文件,而不是全局应用。
是否需要将类似的内容放入Freemarker宏中,以预测可能需要的所有可能类型的日期格式?
答案 0 :(得分:2)
一种方法是使用openingTime?string(pattern)
,其中pattern可以是任何类型的表达式,其求值为字符串。但是它非常冗长而且有点慢,因为模式会一次又一次地被重新解析。
另一种方法是设置date_format
,time_format
和datetime_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)}
。