FreeMarker 的共享变量是我最喜欢的“隐藏”功能之一。此功能能够让你设置自动添加到全部模板的值。 例如,能够设置应用程序的名称做为共享变量。app
1
2
|
Configuration configuration =
new
Configuration();
configuration.setSharedVariable(
"app"
,
"StackHunter"
);
|
而后像任何其余变量同样访问它。jsp
1
|
App: ${app}
|
在过去使用共享变量通常引用资源包 而后使用像 ${i18n.resourceBundle.key} 这样的表达式来获取值。post
1
2
3
|
${i18n.countries.CA}
${i18n.countries['CA']}
${i18n.countries[countryCode]}
|
上面这些行都引用 countries_en.properties 资源包内的 key “CA”对应的值。你须要执行本身的 TemplateHashModel,而后将其添加为一个共享变量来实现这一目标。spa
FreeMarker 内置 JSON 支持。 比方说你有如下的 JSON 存储到变量命名 user 的字符串中。code
1
|
{ 'firstName': 'John', 'lastName': 'Smith', 'age': 25, 'address': { 'streetAddress': '21 2nd Street', 'city': 'New York', 'state': 'NY', 'postalCode': 10021 }}
|
使用 ?eval 将从字符串转换为一个 JSON 对象,而后像其余数据同样在表达式中使用。对象
1
2
|
<#assign user = user?eval>
User: ${user.firstName}, ${user.address.city}
|
若是你已经开发Java Web应用程序一段时间,那么对于 JVM 的 PermGen 问题可能并不陌生。因为 FreeMarker 模板不编译成类,它们不占用 PermGen 空间,并不须要一个新的类加载器加载。ci