默認狀況下,freemarker的變量必須有值,若是沒有被賦值的變量在頁面上使用就會拋出異常,出錯的信息都會顯示在頁面上。
解決辦法:
方法1、咱們能夠在頁面上使用freemarker變量時 以
${xxx?if_exists} 來處理空值的狀況,或採用默認值的方法避免此類問題。但每一個freemarker變量都這樣處理確實比較讓人心煩,請看如下方法。
方法2、在類路徑下 加入
freemarker.properties 文件,裏面配置 classic_compatible=true。
方法3、經過freemarker.template.Configuration的 config.setClassicCompatible(true);經過源碼咱們看到,其實方法2、方法三是思想是一致的,只是實現方法不一樣而已。若是應用中已經存在了
freemarker.properties 並配置了其餘的屬性,能夠在這裏配置,不然推薦使用方法三,畢竟沒有每一個應用的配置文件實在是都夠多了。
方法4、在ftl文件內引入
<!--#setting classic_compatible=true-->。
其餘關於在spring中的配置這裏就省略。如今的項目中沒有用到。
總 結:方法四是須要在每一個須要這樣處理的頁面都要引入的,比較麻煩,、仍是選擇使用 方法2、方法三好了。可是方法2、方法三也不是萬能的。例如我在action中定義一個MyBean類的對象爲 myBean,MyBean中有Comp屬性。在頁面上就要 用以下語句使用:${myBean.comp},這裏myBean可能爲null,comp也可能爲null。這時候 就要使用方法一了,${(myBean.comp)!} 或 ${(myBean.comp)?if_exists}。