#### 2.24. 綁定變量的HTML標籤html
實現功能:Beetl支持將標籤實現類(java代碼)裏的對象做爲臨時變量,被標籤體引用。java
如何實現:app
第一步:自定義標籤類繼承GeneralVarTagBinding 。本身定義「方法體」中的邏輯,並經過得到標籤裏的參數做爲輸入,獲得結果。ide
Ps:獲得「標籤裏的參數值」的方法this.getAttributeValue()。this
第二步:須要進行輸出變量綁定。即按需求實現GeneralVarTagBinding (此類是Tag的子類) 類提供的3個方法 。spa
- void binds(Object… array) 子類在render方法裏調用此類以實現變量綁定,綁定順序同在模板中聲明的順序.net
- void bind(String name, Object value) 子類在render方法裏調用此類以實現變量綁定,name是模板中聲明的變量名,用此方法綁定不如binds更靈活,再也不推薦htm
- Object getAttributeValue 得到標籤的屬性 - Map getAttributes 得到標籤的全部屬性對象
第三步:將標籤和實現類綁定。即gt.registerTag("tag", TagSample.class);繼承
第四步:渲染頁面
一、```java
public class TagSample extends GeneralVarTagBinding{
@Override
public void render() {
// TODO Auto-generated method stub
String name = (String)this.getAttributeValue("name");
String feel = (String)this.getAttributeValue("feel");
if(name.equals("lzs") && feel.equals("happy")){
this.binds("study happy!",1,2,3); // 二、
this.doBodyRender();
}
}
}
三、
public class AppTag
{
public static void main( String[] args ) throws Exception
{
GroupTemplate gt = Util.getGroupTemplate();
Template template = gt.getTemplate("/tag.txt");
//template.binding("input", 3);
gt.registerTag("tag", TagSample.class);
String str = template.render();
System.out.println(str);
}
}
四、
<#tag name="lzs" feel="happy";value,value1,value2,value3>
${value}${value1}${value2}${value3}
</#tag>
相似於常規html標籤,須要在標籤的最後的屬性定義後面加上分號 ";" 此分號表示這個是一個須要在標籤運行時須要綁定變量的標籤。後跟上要綁定的變量列表,綁定多個變量,需用逗號分開,如var1,var2 上。若是後面沒有變量列表,只有分號,則默認綁定到標籤名同名的變量上. 若是標籤有namesapce,則默認綁定訂的變量名不包含namespace
注意,因爲標籤使用由於太長可能換行或者是文本格式化致使換行,目前beetl只容許在屬性之間換行,不然,將報標籤解析錯誤。
Ps:默認狀況下,若是標籤屬性出現了var(能夠經過配置文件改爲其餘屬性名),也認爲是綁定變量的標籤,如上面的例子也能夠這麼寫
var屬性的值能夠是個以逗號分開的變量名列表,如var="total,customer,index"