freemarker對null的處理 無非就這幾種
1 提供默認值
<#if mouse?>
Mouse found
<#else>
也能夠直接${mouse?if_exists}
<#if user.age??>
//TO DO
</#if>
2.忽略null值
假設前提:userName爲null
${userName} error
${userName!} 空白
${userName!'tivon'} tivon
假設前提:user.name爲null
${user.name},異常
${(user.name)!},顯示空白
${user.name!'vakin'},若user.name不爲空則顯示自己的值,不然顯示vakin
${user.name?default('vakin')},同上
${user.name???string(user.name,'vakin')},同上
3 list
<#list userList as user>
…
</#list>
List指令還隱含了兩個循環變量:
user_index:當前迭代項在全部迭代項中的位置,是數字值。
user_has_next:用於判斷當前迭代項是不是全部迭代項中的最後一項。
這2個值也能夠控制 null 或者0的出現。
4<#escape x as x!""></#escape>能夠對全部的變量進行空值處理,這裏是所有替換爲空字符串。固然也能夠替換爲其它字符串。
若是其中某些變量不須要這種替換,能夠加入<#noescape></#noescape>標籤。
5 這種爲全局配置方法
配置classic_compatible=true能夠知足通常須要。默認狀況變量爲null則替換爲空字符串,若是須要自定義,寫上${empty!"EmptyValue of fbysss"}的形式便可
a.經過Configuration設置。Configuration cfg = new Configuration(); cfg.setClassicCompatible(true);//設置屬性
b.經過Eviroment設置。
Environment env = template.createProcessingEnvironment(root, out);
env.setClassicCompatible(true);
c.經過ftl設置:在ftl前加入<!--#setting classic_compatible=true-->;
d.經過Spring配置文件設置
<bean id="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="freemarkerSettings">
<props>
<prop key="classic_compatible">true</prop>
</props>
</property>
</bean>
e.class目錄下添加freemarker.properties文件:加入classic_compatible=true
(須要struts2或spring)
觸類旁通,其餘屬性也能夠用相似方法進行設置。
補充知識點:
Freemarker中對List進行排序
一般咱們的排序操做都是經過DAO層來實現的,若是咱們想隨時更改咱們的排序,那麼就必須修改咱們的DAO層代碼,確實不方便。但Freemarker爲咱們提供了這樣的排序方法,解決了這個問題。
1. sort升序排序函數
sort對序列(sequence)進行排序,要求序列中的變量必須是:字符串(按首字母排序),數字,日期值。
<#list list?sort as l>…</#list>
2. sort_by函數
sort_by有一個參數,該參數用於指定想要排序的子變量,排序是按照變量對應的值進行排序,如:
<#list userList?sort_by(「age」) as user>…</#list>
age是User對象的屬性,排序是按age的值進行的。
3. reverse降序排序函數
<#list list? reverse as l>…</#list>
reverse使用同sort相同。reverse還能夠同sort_by一塊兒使用
如:想讓用戶按年齡降序排序,那麼能夠這個樣寫
<#list userList?sort_by(「age」)?reverse as user>…</#list> web