beetl說明書(國人最新文本模板框架)

 

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有趣的地方,其他特性就不一一列出來了,可以參考詳細使用說明

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章