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