Beetl 模板語言 使用說明
1. 最無聊的一個例子:Hello world
BeeTemplate t = new BeeTemplate("hello,world!$name$."); t.set("name","joel li") String result = t.getTextAsString() ; System.out.println(result); |
輸出“hello,world!joel li.
2. 還是很無聊的一個例子,for 和 if
BeeTemplate t = new BeeTemplate(getFile()); List list = new ArrayList(); list.add(new User(“joel”,33)); list.add(new User(“lucy”,18)); t.set(“users”,list); String result = t.getTextAsString() ; System.out.println(result); |
模板內容
#:for(u in users){ hello this is $u.name$. #:if(u.age>18){ Click here #:}else{ Too yong,go away #:} #:}
|
Beetl語法同javascript相似,是其中的一個子集。
如在模板中定義臨時變量
#:var price = oldPrice*0.2,cac = true;
如在模板中調用方法
$casef(score,1,’Good’,2,’Bad’,’Defualt’)$
以下是有趣的,不同於其他模板語言的內容
3. 自定義控制語句分隔符
不像jsp,velocity,freemark等模板語言,控制語句是在特定的符號內,如JSP, 是
<% %> . Beetl允許自定義控制語句分割符,如可以在HTML模板中定義分割符號爲
<!--: 控制語句 --> (看着象註釋吧,哈哈)
在Shell模板腳本中定義控制語句以#:開頭
如下例子定義了一個類似JSP的控制符
BeeTemplate t = new BeeTemplate("<%var email='javamonkey';%>"); t.setStatementStart("<%"); t.setStatementEnd("%>"); |
默認控制分割符號是#: 和 回車
4. 自定義佔位符
同樣可以定位佔位符號
BeeTemplate t = new BeeTemplate("~userName~"); t.setPlaceholderStart("~"); t.setPlaceholderEnd("~"); |
默認是佔位符是$
5. 自定義函數
可以爲beetl增加內置函數
必須實現 public interface Function { public Object call(Object... paras) ;
} 如模仿oralce NVL函數
public class NVLFunction implements Function { public Object call(Object... paras){ if(paras.length!=2){ throw new RuntimeException("參數錯誤,期望Object,Object"); } if(paras[0]==null){ return paras[1]; }else{ return paras[0]; }
} }
使用例子如下 BeeTemplate t = new BeeTemplate("$nvl(name,'N/A')$"); t.registerFunction("nvl", new NVLFunction()); |
6. 虛擬屬性支持:
由於MVC架構中,M往往並不能完全滿足V的需要,尤其M代表的是數據庫模型,因爲可以在Beetl爲M增加虛擬屬性來滿足要求
如爲java.util.Date類增加一個displayDate用於顯示yyyy-MM-dd風格
BeeTemplate t = new BeeTemplate("$date.displayDate$"); t.registerVirtualAttributeEval(Date.class, "displayDate", new DateDisplayEval()); t.set("date", new Date());
|
如果在循環中,對象還具有__index,__count倆個虛擬屬性以表示當前索引以及以及所屬集合大小
7 文本處理函數:
並不是所有模板都適合用站位符號,有時候需要根據位置去替換,如數據庫配置文件,我見到spring 使用佔位符就是一個糟糕的想法。Beetl提供了根據位置替換的函數,並且開發者可以自由增加這些函數
#:var ip= "192.168.1.1",port=7001;replaceProperties(ip,port){ ip=127.0.0.1 port=8002 #:}
|
8 佔位符格式化
$date, fm=’yyyy-MM-dd’$ |
甚至可以像Pipeline那樣處理
$date, nvl=”N/A”,fm=’yyyy-MM-dd’$ |
以上部分是Beetl有趣的地方,其他特性就不一一列出來了,可以參考詳細使用說明