Beetl 模板语言 使用说明
1. 最无聊的一个例子:Hello world
BeeTemplate t = new BeeTemplate("hello,world!$name$."); t.set("name","joel li") String result = t.getTextAsString() ; System.out.println(result); |
输出“hello,world!joel li.
2. 还是很无聊的一个例子,for 和 if
BeeTemplate t = new BeeTemplate(getFile()); List list = new ArrayList(); list.add(new User(“joel”,33)); list.add(new User(“lucy”,18)); t.set(“users”,list); String result = t.getTextAsString() ; System.out.println(result); |
模板内容
#:for(u in users){ hello this is $u.name$. #:if(u.age>18){ Click here #:}else{ Too yong,go away #:} #:}
|
Beetl语法同javascript相似,是其中的一个子集。
如在模板中定义临时变量
#:var price = oldPrice*0.2,cac = true;
如在模板中调用方法
$casef(score,1,’Good’,2,’Bad’,’Defualt’)$
以下是有趣的,不同于其他模板语言的内容
3. 自定义控制语句分隔符
不像jsp,velocity,freemark等模板语言,控制语句是在特定的符号内,如JSP, 是
<% %> . Beetl允许自定义控制语句分割符,如可以在HTML模板中定义分割符号为
<!--: 控制语句 --> (看着象注释吧,哈哈)
在Shell模板脚本中定义控制语句以#:开头
如下例子定义了一个类似JSP的控制符
BeeTemplate t = new BeeTemplate("<%var email='javamonkey';%>"); t.setStatementStart("<%"); t.setStatementEnd("%>"); |
默认控制分割符号是#: 和 回车
4. 自定义占位符
同样可以定位占位符号
BeeTemplate t = new BeeTemplate("~userName~"); t.setPlaceholderStart("~"); t.setPlaceholderEnd("~"); |
默认是占位符是$
5. 自定义函数
可以为beetl增加内置函数
必须实现 public interface Function { public Object call(Object... paras) ;
} 如模仿oralce NVL函数
public class NVLFunction implements Function { public Object call(Object... paras){ if(paras.length!=2){ throw new RuntimeException("参数错误,期望Object,Object"); } if(paras[0]==null){ return paras[1]; }else{ return paras[0]; }
} }
使用例子如下 BeeTemplate t = new BeeTemplate("$nvl(name,'N/A')$"); t.registerFunction("nvl", new NVLFunction()); |
6. 虚拟属性支持:
由于MVC架构中,M往往并不能完全满足V的需要,尤其M代表的是数据库模型,因为可以在Beetl为M增加虚拟属性来满足要求
如为java.util.Date类增加一个displayDate用于显示yyyy-MM-dd风格
BeeTemplate t = new BeeTemplate("$date.displayDate$"); t.registerVirtualAttributeEval(Date.class, "displayDate", new DateDisplayEval()); t.set("date", new Date());
|
如果在循环中,对象还具有__index,__count俩个虚拟属性以表示当前索引以及以及所属集合大小
7 文本处理函数:
并不是所有模板都适合用站位符号,有时候需要根据位置去替换,如数据库配置文件,我见到spring 使用占位符就是一个糟糕的想法。Beetl提供了根据位置替换的函数,并且开发者可以自由增加这些函数
#:var ip= "192.168.1.1",port=7001;replaceProperties(ip,port){ ip=127.0.0.1 port=8002 #:}
|
8 占位符格式化
$date, fm=’yyyy-MM-dd’$ |
甚至可以像Pipeline那样处理
$date, nvl=”N/A”,fm=’yyyy-MM-dd’$ |
以上部分是Beetl有趣的地方,其他特性就不一一列出来了,可以参考详细使用说明