Beetl學習 —— 綁定變量的HTML標籤

#### 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"

相關文章
相關標籤/搜索