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