freemarker中對null值問題的處理


 

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")} 這判定用戶權限角色為空


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM