Beetl2.x即將發佈,性能,功能上已經很是卓越了,這裏介紹一下beetl的好玩的地方,使用者能夠定製beetl不少特性 html
1 自定義控制語句定界符: java
開發者能夠根據本身喜好定義<% %>做爲控制語句定界符號,也能夠定義<? ?> 或者<!--# -->等等,取決於你的喜愛,有些開發者甚至定義出@ +回車的定界符號,以下: express
@ for(user in userList){ <span> ${user.name} ........ @}
模板常碰到變量爲空或者變量不存在的狀況,beetl能夠加入!輕易解決這種問題 安全
${user.name!} ${user.age!"未知"}
<% directive safe_output_open; %> ${user.name} ${user.name} ${user.name}${user.name}${user.name}${user.name}
beetl2.0引入了相似java字節碼修改器的概念,提供簡單易懂的方法能讓你修改beetl「字節碼」,所以能完成不少有趣功能,好比 xss
好比一個常見需求,爲了防止xss攻擊,須要把字符串輸出的作一下過濾,而其餘輸出不須要過濾,通常狀況,採用beetl或者使用其餘模板引擎,均可以加入一個格式化函數,如: ide
${user.name,xss}
可是,實際上也能夠動態修改PlaceholderST來爲全部字符串輸出的語句自動加上一個過濾,代碼以下: 函數
public MyTemplateProbe extends BasicProgramOptProbe{ protected void addMore(StatementParser parser) { parser.addListener(PlaceholderST.class,new PlaceholderSTChange()) } }
以下代碼片斷: 性能
public class PlaceholderStChange implements Listener{ @Override public Object onEvent(Event e) { Stack stack = (Stack) e.getEventTaget(); PlaceholderSt o = (PlaceholderSt)stack.peek(); if(o.expression.type==String.class) o.format = xssFormat; } }
4 不須要申明類型的強類型模板引擎 測試
beetl是個強類型模板引擎,從而保證了性能最大化,IDE的重構支持,屬性提示等,但他又是不須要像其餘模板引擎那樣必須申明類型。beetl假設用戶老是像模板引擎裏傳入同一類型的對象,如: spa
<% var na = user.name; %>
beetl不用顯示指定類型,從而在提升性能的時候簡化了模板開發。固然,你也能夠指定類型,好比:
<% /* *@type User me,List<User> list */ for(user in List){ %>
5 beetl是腳本加標籤的混合
基本上,beetl開創了腳本式的模板引擎,但有趣的地方,他實際上支持標籤,好比:
<% var salary = getAll(); %> <#selection values = "${salary}" id="id" value="name" #/>
對於標籤控來講,這再合適不過了,對於CMS系統,這也很是好
6 獨特的語法
儘管beetl避免生僻的,非人類直觀的語法,但仍是引入了少許新語法,創造新語法這不值得beetl開發者驕傲,但這些新語法有時候對開發有好處。如for-elsefor
<% for(user in userList){ println(user.name); }elsefor{ println("no data"); } %>
7 功能和性能。
儘管功能和性能不能算beetl好玩的地方,但光好玩,不實用也不行。以下是基準的性能測試,可讓有興趣的朋友更加確信beetl是個好的的選擇: