锁定老帖子 主题:Beetl 模板语言介绍
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
|
||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
作者 | 正文 | |||||||||||
发表时间:2011-06-20
最后修改:2011-08-21
地址:http://beetl.sourceforge.net/ 当前状态:预览版 类似于velocity,jsp,stringtemplate,freemarker,codesmith .等等, 它语法实际上是一个JAVASCRIPT 子集,所以使用起来很简单。除此之外,并提供一些有趣独特的功能
Beetl 模板语言5分钟使用说明
1. 最无聊的一个例子:Hello world
输出“hello,world!joel li.
2. 还是很无聊的一个例子,for 和 if
模板内容
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的控制符
默认控制分割符号是#: 和 回车 4. 自定义占位符 同样可以定位占位符号
默认是占位符是$
5. 自定义函数 可以为beetl增加内置函数
6. 虚拟属性支持: 由于MVC架构中,M往往并不能完全满足V的需要,尤其M代表的是数据库模型,因为可以在Beetl为M增加虚拟属性来满足要求
如为java.util.Date类增加一个displayDate用于显示yyyy-MM-dd风格
如果在循环中,对象还具有__index,__count俩个虚拟属性以表示当前索引以及以及所属集合大小
7 文本处理函数: 并不是所有模板都适合用站位符号,有时候需要根据位置去替换,如数据库配置文件,我见到spring 使用占位符就是一个糟糕的想法。Beetl提供了根据位置替换的函数,并且开发者可以自由增加这些函数
8 占位符格式化
甚至可以像Pipeline那样处理
9 严格MVC支持 有些架构师不喜欢模板语言有太多的功能,尤其是函数调用,算数表达式和复杂的条件表达式 如果你认同strictly enforces model-view separation 观点,可以设置BeeTemplate. makeStrict(true);
如上代码会导致编译错误 STRICK_MVC 位于1行,符号 var 1|#:if(!isGirl){var c=1;}
以上部分是Beetl有趣的地方,其他特性就不一一列出来了,可以参考详细使用说明
当前版本:0.5.01
更新历史 2011-8-21 增加了严格MVC限制,如果你认同strictly enforces model-view separation 观点,可以设置BeeTemplate. makeStrict(true); 2011-8-16 家里漏水,正好修改了不少功能,如下: ü 增加includeFT,includeST 函数,类似jsp include指令,如$inlcude(‘/child/subTemplate.txt’)$ ü 增加缓存RuntimeTemplate功能,使得第二次使用,性能提升40倍,这是因为减少了parser时间 ü 修复了回车换行的某些问题,回车换行应该不再困扰我了 ü 增加GroupTemplate,Context,BeeTemplate一些方法和修改了一些实现 2011-8-13修复回车换行的Bug,重构Transformor,此类将来还需要再优化。 2011-8-10 无任何更新,太忙了。写一行,证明我还在关注自己的Beetl。但计划修复一个大bug,以及增强虚拟属性特性,可能新增语法“虚拟视图类” 2011-7-20 增加Template作为模板引擎接口,并增加CompiledBeeTemplate 为预编译做准备 2011-7-9 重构虚拟属性__index 和 __size 2011-7-5 增加回车换行符作为控制语句结束的标示。修改虚拟属性必须以~开头增加单元测试 2011-6-22 修改了语法错时候不能正确显示原文bug 2011-6-20 更新Transform代码,自定义分隔符,占位符,以及增加Escape支持 2011-6-1 初始化一个版本 2011-5-12 开始开发模板语言,并最终命名为beetl 2011-4-1 提出创建一个更为灵活,实用的模板语言想法
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
||||||||||||
返回顶楼 | ||||||||||||
发表时间:2011-08-16
稳定版已经出来
开源首页:http://beetl.sourceforge.net/ 下载:http://sourceforge.net/projects/beetl/files/beetl-src-0.51-all.zip/download 补充一下更新历史: 2011-8-16 家里漏水,正好修改了不少功能,如下: 增加includeFT,includeST 函数,类似jsp include指令,如$inlcude(‘/child/subTemplate.txt’)$ 增加缓存RuntimeTemplate功能,使得第二次使用,性能提升40倍,这是因为减少了parser时间 修复了回车换行的某些问题,回车换行应该不再困扰我了 增加GroupTemplate,Context,BeeTemplate一些方法和修改了一些实现 2011-8-13修复回车换行的Bug,重构Transformor,此类将来还需要再优化。 2011-8-10 无任何更新,太忙了。写一行,证明我还在关注自己的Beetl。但计划修复一个大bug,以及增强虚拟属性特性,可能新增语法“虚拟视图类” 2011-7-20 增加Template作为模板引擎接口,并增加CompiledBeeTemplate 为预编译做准备 2011-7-9 重构虚拟属性__index 和 __size 2011-7-5 增加回车换行符作为控制语句结束的标示。修改虚拟属性必须以~开头增加单元测试 2011-6-22 修改了语法错时候不能正确显示原文bug 2011-6-20 更新Transform代码,自定义分隔符,占位符,以及增加Escape支持 2011-6-1 初始化一个版本 2011-5-12 开始开发模板语言,并最终命名为beetl 2011-4-1 提出创建一个更为灵活,实用的模板语言想法 |
||||||||||||
返回顶楼 | ||||||||||||
发表时间:2011-08-16
有意思,
效率怎么样 |
||||||||||||
返回顶楼 | ||||||||||||
发表时间:2011-08-17
kimmking 写道 有意思,
效率怎么样 runtime版本 也就是解释执行,现在以一个1K的文件做模板,内含少量控制语句和站位符做测试,大概需要4毫秒。 随着模板文件增长,应该是线性增长的。 预编译版本,就是编译成java class,目前还没有做,但接口是一致的,切换只要设置GroupTemplate.isProudct = true runtime版本用于web 界面估计还不行,但用于代码生成是可以的,它已经被使用验证过了 |
||||||||||||
返回顶楼 | ||||||||||||
发表时间:2011-08-17
补充一下:
我只在我一个5年前买的笔记本上做的简单性能测试 头一次使用需要170毫秒,再次使用 大概4-10毫秒。主要是缓存了解析的中间结果,提高了性能 |
||||||||||||
返回顶楼 | ||||||||||||
发表时间:2011-08-17
#:for(u in users){ hello this is $u.name$. #:if(u.age>18){ Click here #:}else{ Too yong,go away #:} #:} 这个#:咋就这么别扭呢,我看你支持控制语句分隔符,自定义占位符。那对应的语法解析部分是你自己写的?没有javacc,yacc |
||||||||||||
返回顶楼 | ||||||||||||
发表时间:2011-08-18
最后修改:2011-08-18
#是shell脚本里的注释,所以把控制语句隐藏在注释里而不影响原来的文件。
譬如html模板,可以用<!--(代码开始): -->作为控制语句开始和结束符号,这样,这个模板既能被IE识别还能被beetl识别 如果你喜欢,可以设置成jsp风格 group.setStartStatemetn("<%") group.setStartStatemetn("%>") 语法解析用的是antlr,我看你研究过javac,有兴趣可以加入聊天群 61765717。应该是国内唯一的研究antlr的聚结地,我是第二任群主,呵呵 |
||||||||||||
返回顶楼 | ||||||||||||
发表时间:2011-08-18
重复制造轮子?
|
||||||||||||
返回顶楼 | ||||||||||||
发表时间:2011-08-18
gaobusi 写道 重复制造轮子?
哪重复了? |
||||||||||||
返回顶楼 | ||||||||||||
发表时间:2011-08-21
在跟朋友激烈讨论后,增加一个新功能,严格MVC支持,
有些架构师不喜欢模板语言有太多的功能,尤其是函数调用,算数表达式和复杂的条件表达式等各种属于业务逻辑的部分。 如果你认同此观点,以及论文strictly enforces model-view separation(http://www.cs.usfca.edu/~parrt/papers/mvc.templates.pdf) 观点,可以设置BeeTemplate.makeStrict(true); 如下代码: BeeTemplate t = new BeeTemplate("#:if(!isGirl){var c=1;}"); t.makeStrict(true); t.set("isGirl", false); t.getTextAsString() ; 会导致编译错误 STRICK_MVC 位于1行,符号 var 1|#:if(!isGirl){var c=1;} |
||||||||||||
返回顶楼 | ||||||||||||