Beetl模板引擎入門教程


最近項目中有個郵件發送的需求,不過要求發送的HTML格式的郵件。由於Beetl對java語言的良好支持和很好的性能,我們決定使用Beetl作為我們的模板引擎。

Beetl官網已經有了很詳細的教程,所以本篇側重於實戰應用,適合需要不懂beetl或其他模板引擎但需要快速上手寫出代碼的人。

那么為什么要用模板引擎呢?很簡單的原因,實際應用場景中文本的格式是固定的,但是內容有所不同。如果是不復雜的內容我們可以直接用代碼生成需要的文本。但是當文本變得復雜的時候,我們用java生成文本的性能就會下降,同時也不利於維護。解決辦法是將數據和格式進行分離,將一個文本分成模板和數據。模板中有固定的格式,需要動態變化的數據一般用占位符代替。這樣我們想改模板格式的時候不需要去更改代碼,只需要去改模板就可以了。同時模板引擎渲染文本的效率也會更高。

一、安裝

Maven項目直接添加下面的依賴。

        <dependency> <groupId>com.ibeetl</groupId> <artifactId>beetl-framework-starter</artifactId> <version>1.1.55.RELEASE</version> </dependency> 

二、直接上手

Beetl的核心是GroupTemplate,創建GroupTemplate需要倆個參數,一個是模板資源加載器,一個是配置類。

    public void BeetlString() throws Exception { //new一個模板資源加載器 StringTemplateResourceLoader resourceLoader = new StringTemplateResourceLoader(); /* 使用Beetl默認的配置。 * Beetl可以使用配置文件的方式去配置,但由於此處是直接上手的例子, * 我們不去管配置的問題,只需要基本的默認配置就可以了。 */ Configuration config = Configuration.defaultConfiguration(); //Beetl的核心GroupTemplate GroupTemplate groupTemplate = new GroupTemplate(resourceLoader, config); //我們自定義的模板,其中${title}就Beetl默認的占位符 String testTemplate="<html>\n" + "<head>\n" + "\t<title>${title}</title>\n" + "</head>\n" + "<body>\n" + "\t<h1>${name}</h1>\n" + "</body>\n" + "</html>"; Template template = groupTemplate.getTemplate(testTemplate); template.binding("title","This is a test template Email."); template.binding("name", "beetl"); //渲染字符串 String str = template.render(); System.out.println(str); } 

Beetl的使用很簡單,我們首先需要一個模板資源加載器(實際上有六種不同的模板資源加載器),和Beetl的配置來創建Beetl核心GroupTemplate。

第二步,我們需要通過GroupTemplate將自己定義的String模板加載為Beetl模板——Template。

第三步,我們使用template中的操作,將數據和占位符綁定。

第四步,渲染最終的文本。

這樣一個簡單的Beetl例子就完成了,你可以運行一下試試看。渲染成功的結果應該是這樣的:

<html> <head> <title>This is a test template Email.</title> </head> <body> <h1>beetl</h1> </body> </html> 

三、使用Map綁定

上面的例子中只有兩個參數,我們單個綁定也不會覺得麻煩。實際使用可能會有相當多的參數,這時候我們直接綁定就會變得麻煩。Beetl支持使用Map來綁定參數。

    //... Map<String,String> map=new HashMap<String,String>() map.put("name", "beetl"); map.put("title","This is a test template Email."); template.binding(map); //... 

可以試着優化一下代碼結構來更好地讓數據和模板分離,比如函數的參數傳入一個map。

四、使用循環語句

上一步我們使用了Map來綁定,這次我們要試試傳入Map格式的數據,並在Beetl模板中使用循環語句遍歷Map。

Beetl支持豐富的循環方式,如for-in,for(exp;exp;exp),以及while循環,以及循環控制語句break;continue; 另外,如果沒有進入for循環體,還可以執行elsefor指定的語句。

模板中使用Beetl語法需要用<% %> 括起來。以下例子來自官方文檔:

<%
for(entry in map){ var key = entry.key; var value = entry.value; print(value); } %> 

我們給出一個實際的例子:

   public void BeetlString() throws Exception { //... String testTemplate="<html>\n" + "<head>\n" + "\t<title>This is a test template Email.</title>\n" + "</head>\n" + "<body>\n" + "\t<h1>beetl</h1>\n" + "<%" + " for(entry in map){" + " print(entry.key+\":\"+entry.value);}%>"+ "</body>\n" + "</html>"; Template t = gt.getTemplate(testTemplate); Map<String,String> data=new HashMap<String,String>(); data.put("test","213"); data.put("aaa","123"); //把map類型數據綁定到占位符map上,但在Beetl中使用循環時不需要用${} t.binding("map",data); String str = t.render(); System.out.println(str); } 

輸出結果:

<html> <head> <title>This is a test template Email.</title> </head> <body> <h1>beetl</h1> aaa:123test:213</body> </html> 

五、條件語句

條件語句跟js的語法基本一致,沒有特別的地方。但是請注意<%%>中不能使用占位符,否則會報錯。

以下內容來自官方文檔

if else

同js一樣,支持if else,如下例子

<%
var a =true; var b = 1; if(a&&b==1){ }else if(a){ }else{ } %> 
switch-case

同js一樣,支持switch-case,如下例子

<%
var b = 1; switch(b){ case 0: print("it's 0"); break; case 1: print("it's 1"); break; default: print("error"); } %> 

switch變量可以支持任何類型,而不像js那樣只能是整形

select-case

select-case 是switch case的增強版。他允許case 里有邏輯表達式,同時,也不需要每個case都break一下,默認遇到合乎條件的case執行后就退出。

<%
var b = 1; select(b){ case 0,1: print("it's small int"); case 2,3: print("it's big int"); default: print("error"); } %> 

select 后也不需要一個變量,這樣case 后的邏輯表達式將決定執行哪個case.其格式是

<%
select {
        case boolExp,orBoolExp2: doSomething(); } %> <% var b = 1; select{ case b<1,b>10: print("it's out of range"); break; case b==1: print("it's 1"); break; default: print("error"); } %>


作者:九里
鏈接:https://www.jianshu.com/p/e2be73f07b3f
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。


免責聲明!

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



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