beetl模板的${!}用法


轉自:http://ibeetl.com/guide/#beetl

2.20. 安全輸出

安全輸出是任何一個模板引擎必須重視的問題,否則,將極大困擾模板開發者。Beetl中,如果要輸出的模板變量為null,則beetl將不做輸出,這點不同於JSP,JSP輸出null,也不同於Freemarker,如果沒有用!,它會報錯.

模板中還有倆種情況會導致模板輸出異常

  • 有時候模板變量並不存在(譬如子模板里)
  • 模板變量為null,但輸出的是此變量的一個屬性,如${user.wife.name}

針對前倆種種情況,可以在變量引用后加上!以提醒beetl這是一個安全輸出的變量。

如${user.wife.name! },即使user不存在,或者user為null,或者user.wife為null,或者user.wife.name為null beetl都不將輸出

可以在!后增加一個常量(字符串,數字類型等),或者另外一個變量,方法,本地調用,作為默認輸出,譬如:

${user.wife.name!”單身”},如果user為null,或者user.wife為null,或者user.wife.name為null,輸出”單身”

譬如

${user.birthday!@System.constants.DefaultBir}, 表示如果user為null,或者user. birthday為null,輸出System.constants.DefaultBir

還有一種情況很少發生,但也有可能,輸出模板變量發生的任何異常,如變量內部拋出的一個異常

這需要使用格式${!(變量)},這樣,在變量引用發生任何異常情況下,都不作輸出,譬如

${!(user.name)},,beetl將會調用user.getName()方法,如果發生異常,beetl將會忽略此異常,繼續渲染

值得注意的是,在變量后加上!不僅僅可以應用於占位符輸出(但主要是應用於占位符輸出),也可以用於表達式中,如:

<%
var k = user.name!'N/A'+user.age!;
%> <% ${k} %> 

如果user為null,則k值將為N/A

在有些模板里,可能整個模板都需要安全輸出,也可能模板的部分需要安全輸出,使用者不必為每一個表達式使用!,可以使用beetl的安全指示符號來完成安全輸出 如:

<%
DIRECTIVE SAFE_OUTPUT_OPEN;
%> ${user.wife.name} 模板其他內容,均能安全輸出…… <% //關閉安全輸出。 DIRECTIVE SAFE_OUTPUT_CLOSE; %> 

Beetl不建議每一個頁面都使用DIRECTIVE SAFE_OUTPUT_OPEN,這樣,如果如果真有不期望的錯誤,不容易及時發現,其次,安全輸出意味着beetl會有額外的代碼檢測值是否存在或者是否為null,性能會略差點。所以建議及時關閉安全輸出(這不是必須的,但頁面所有地方是安全輸出,可能不容易發現錯誤)

在for-in 循環中 ,也可以為集合變量增加安全輸出指示符號,這樣,如果集合變量為null,也可以不進入循環體,如:

<%
var list = null; for(item in list!){ }elsefor{ print("no data"); } %>


免責聲明!

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



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