精华帖 (0) :: 良好帖 (0) :: 新手帖 (6) :: 隐藏帖 (0)
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
作者 | 正文 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2011-08-28
最后修改:2011-09-04
Beetl模板语言使用指南 什么是Beetl Beetl是Bee Template language,Bee译为忙碌的人,意指忙碌中国的开发人员。目前版本0.6beta,大小约320K Beetl是国人提供的一款开源免费得模板语言,作者有10余年Java开发经验,曾在国内外著名大公司工作过,根据自己实际使用模板语言的心得体会而编写的一款模板语言,它具有如下特性: 1 非常简单:它的语法是javascript一个子集,只有少量的大家熟悉的符号。任何了解java,或者javascript的人,都能快速学会。如果从未用过任何模板语言,用Beetl是非常很合适的 2 同时支持较为松散的MVC和严格的MVC,如果在模板语言里嵌入计算表达式,复杂条件表达式,以及函数调用有干涉业务逻辑嫌疑,你可以禁止使用这些语法。关于这一点,可以参考strictly enforces model-view separation 3 提供一系列其他模板语言没有提供的功能,如自定义占位符号,控制语句符号,虚拟属性,自定义函数,文本处理函数等,它们并不复杂,但有可能解决你在使用别的模板语言时候遇到的一些不便捷的问题
Beetl能为你做些什么 作为模板语言,你可以用于任何适合在MVC的地方。如代码生成,或者web界面, 因为Beetl是基于antlr实现语法解析的,因此如果你仅仅对antlr感兴趣,beetl仍然可以作为你的一个重要参考 关于Beetl性能: 目前实现了runtime版本,适合代码生成。暂时不适合作为web界面。它本生的是以易读的方式实现,并未经过优化。然而,即将推出预编译版本,可以保证有很好的性能 Beetl目前渲染一个7K文件,内含少量控制语句和占位符,所需要时间是1毫秒,这是在我一个四年前的老机器上跑得,作为代码生成,你完全无需担心性能。
展望Beetl预编译实现出来后,性能将至少提高2-3倍以上,因此未来能超越Freemaker
关于功能: http://freemarker.sourceforge.net/fmVsVel.html 是一篇freemaker与velocity功能比较的文章,很幸运Beetl能以简单易学,更易扩展的方式支持所有功能。 下表是以此文章为基础做的比较
基本用法
Hello Beetl
1用于BeeTemplate创建一个模板,此时使用的是一个字符串输入,输入也可以是java.io.File或者java.io.reader.对于beetl来说,如果输入是文件,那将会缓存中间的解析结果而大幅度提升性能 2定义变量,set方法允许字符串,对象作为参数,如果需要引用对象的属性,则用小数点,如$user.name$,如果属性是个List集合,可以用[索引],如$user.friends[0]$,如果属性是Map集合, 使用[key],key为任何对象,如$books[‘thinking in java’].author$ 3调用template.getTextAsString() 或者template.getText(OutputStream os)都可以获得模板渲染的结果
控制语句和占位符号 Beetl默认情况下,采用#:作为控制语句开始,回车作为控制语句结束
默认情况下,占位符号使用$作为开始和结尾占位符号
然而,Beetl支持自定义控制语句和占位符号,以适应不同类型模板文件
更多参考http://beetl.sourceforge.net/ 或者我的博客 http://javamonkey.iteye.com/blog/1159927 。在论坛里发不了更多内容 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2011-08-30
发现一个bug以修复,如下例子
<%var a=1; for(user in userList){ %> <---多个空格在这儿 ..................... 如果<% 和 %>之间多行,且最好一个%>后有空格,会导致错误提示显示不正确的行数。现在已经修复 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2011-08-30
最后修改:2011-08-30
--- 连废物空白移除都不知道为啥要这个??my god ...我对你nnn年的大公司工作经验深表怀疑。。
反而是加上去的那些东西看不出是啥东西。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2011-08-30
ray_linn 写道 --- 连废物空白移除都不知道为啥要这个??my god ...我对你nnn年的大公司工作经验深表怀疑。。
反而是加上去的那些东西看不出是啥东西。 说一下,是干什么用的,看看beetl能不能实现 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2011-08-30
最后修改:2011-08-30
javamonkey 写道 ray_linn 写道 --- 连废物空白移除都不知道为啥要这个??my god ...我对你nnn年的大公司工作经验深表怀疑。。
反而是加上去的那些东西看不出是啥东西。 说一下,是干什么用的,看看beetl能不能实现 我看了一下,我觉得废物空白移除这个功能很有问题,这是由于freemarker本身技术导致的,是它产生的“废物空白”。因此他又增加一个移除功能。这不值得freemarker炫耀 这个在Beetl中完全是不需要的。没有此功能很正常 另外,我加上去的东西,如果看不出来啥东西,说明文档写的不详细,可以发邮件问我吧。我就在这里给你解释一个“文本处理函数”,如下我模拟了废物空白移除功能的beetl实现(假如Beetl真产生了这“废物空白”) #:removeAnyChar(" ","/t","/n"){ hello, text process function 。 #:} removeAnyChar是一个简单的文本处理函数接收{ }之间的内容,进行删除废物操作后输出 因此结果是 hello, text process function 。 如果你还不理解,请回贴留下你的qq或者邮件,我会再给你解释一遍 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2011-08-30
iteye上的那些大牛们真是two到不行。
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2011-08-30
不知道你唠唠叨叨在说什么,空白移除是基于:一个模板语言默认不应该对标记结束之后的文本多加处理,除非用户显示说明,因此输入 这样一个模板标记:
<#list users as user>[BR] <#if !user.hidden>[BR] <li>${user.name}[BR] </#if>[BR] </#list>[BR] 会多余许多空白: <p>List of users:[BR] [BR] <ul>[BR] [BR] [BR] <li>Joe[BR] [BR] [BR] [BR] [BR] [BR] <li>Julia[BR] [BR] [BR] </ul>[BR] <p>That's all. 废物空白移除就是让用户显式地来抑制这些空白。 --了解了么? |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2011-08-30
用freemarker怎么会有这么多废物空白呢?
我再说一遍,beetl是不会生成废物空白的,所以也没有必要有这个功能。 这明显是freemarker的一个缺点嘛,在你这到说成了一个新功能。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2011-08-30
这怎么是freemarker的缺点呢,你在编程的过程中有时为了增强代码的可读性,或者使用了格式化会造成很多空白和回车的,而输出到客户端时这些空白和回车显然是多余的,不去除怎么行啊??????
再问一句,你用模板语言生成过JSON吗?? 如果你做过这类事情,就知道去除多余空白的重要性了,否则浏览器在解析含有大量回车等的JSON时视会报错的。 另外,不要随意地就称自己的东西比人家的好,个人觉得你的东西离freemarker还有很遥远的距离哦。 javamonkey 写道 用freemarker怎么会有这么多废物空白呢?
我再说一遍,beetl是不会生成废物空白的,所以也没有必要有这个功能。 这明显是freemarker的一个缺点嘛,在你这到说成了一个新功能。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2011-08-30
zuiyanwangyue 写道 这怎么是freemarker的缺点呢,你在编程的过程中有时为了增强代码的可读性,或者使用了格式化会造成很多空白和回车的,而输出到客户端时这些空白和回车显然是多余的,不去除怎么行啊??????
再问一句,你用模板语言生成过JSON吗?? 如果你做过这类事情,就知道去除多余空白的重要性了,否则浏览器在解析含有大量回车等的JSON时视会报错的。 另外,不要随意地就称自己的东西比人家的好,个人觉得你的东西离freemarker还有很遥远的距离哦。 javamonkey 写道 用freemarker怎么会有这么多废物空白呢?
我再说一遍,beetl是不会生成废物空白的,所以也没有必要有这个功能。 这明显是freemarker的一个缺点嘛,在你这到说成了一个新功能。 1 ray_linn 的例子应该不是为了争强可读性,而是freemarker自己生成的多余空白吧。 我也用过freemarker,它有时候会生成多余的空白或者换行符,而且上下行对不齐。这点JSP也是有的。Beetl目前还没有此问题,我为解决这些问题,花掉了我1/4的精力。 2 针对你说的json 去除空白,我想我再把我刚才的例子贴出 #:removeAnyChar(" ","/t","/n"){ 需要去除空白的内容 #:} 这说明了beetl有极好的扩展性,你的问题我能一下子就解决了,我会吧去除空白或者压缩文本处理函数加入到我的core function里。 3 最后,我的比较是,是易用性和扩展性好,功能和性能持平。请看清楚了 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||