`
javamonkey
  • 浏览: 166936 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

我自己做的一个类似velocity的 模板语言

阅读更多

地址:http://beetl.sourceforge.net/ 当前状态:预览版 类似于velocity,jsp,stringtemplate,freemarker,codesmith .等等,并提供一些有趣独特的功能

 

 

Beetl 模板语言5分钟使用说明

 

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代表的是数据库模型,因为可以在BeetlM增加虚拟属性来满足要求

 

如为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有趣的地方,其他特性就不一一列出来了,可以参考详细使用说明

 

当前版本:0.5.01

下载

浏览代码

 

 

更新历史

2011-6-22 修改了语法错时候不能正确显示原文bug

2011-6-20 更新Transform代码,自定义分隔符,占位符,以及增加Escape支持

2011-6-1 初始化一个版本

2011-5-12 开始开发模板语言,并最终命名为beetl

2011-4-1  提出创建一个更为灵活,实用的模板语言想法

分享到:
评论
1 楼 javamonkey 2011-07-04  
预计本月底runtime版本可以发布,目前在写单元测试,以及最后少数功能的添加

相关推荐

Global site tag (gtag.js) - Google Analytics