1. freemarker不支持null。
如果值為null會報錯。
2.當值為null的處理
1)過濾不顯示
Hello ${name!} 在屬性后面加感嘆號即可過濾null和空字符串
if和”??“
<#if age??>
無年齡值
<#/if>
$和!
${age!'0'}
如果age為null,默認給'0'
2)設置默認值
如${student1.user!"null"}
3)判斷是否存在值
$stduent.user?if_exists}
這樣顯示就沒有問題了
if判斷null處理
=========================================================================
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>
<#if SoStoreAddressAndAppMaster.paymentStatus?if_exists=="00">
</#if>
4)?? 用於判斷是否為空
<#if user.role??>
當前用戶沒有權限角色
<#else>
當前用戶有權限角色
</#if>
${user.role???string}這里將結果以字符串的形式輸出:true 或者false
${user.role???string("YES","NO")} 這判定用戶權限角色為空