论坛首页 Java企业应用论坛

(更新)Beetl 0.61beta 发布,性能和功能与freemarker持平,易用性和扩展性远远超越

浏览 6173 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (6) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-08-30  

所以我对你“作者有10余年Java开发经验,曾在国内外著名大公司工作过”。。。这个经验非常怀疑。连这个很简单的功能你都理解不了。不再给你讲例子


你就说说你对标签结尾处的回车换行符是怎么处理的就好了?
0 请登录后投票
   发表时间:2011-08-30   最后修改:2011-08-30
辛辛苦苦写个开源软件还要被质疑,哎......
0 请登录后投票
   发表时间:2011-08-30  
ray_linn 写道

所以我对你“作者有10余年Java开发经验,曾在国内外著名大公司工作过”。。。这个经验非常怀疑。连这个很简单的功能你都理解不了。不再给你讲例子


你就说说你对标签结尾处的回车换行符是怎么处理的就好了?


没有标签的概念,因为采用javascript语法,所以结尾是用“}”,下面的例子(假设我们模拟jsp代码,使用<% %> )

(多个空格)    <%for(user in userList){ %>   (多个空格并回车)
(4个空格)$user.name$ (三个空格并回车)
几个空格  <%}%> 多个空格并回车

通过Beetl渲染后,结果如下


(4个空格)javamonkey (三个空格并回车
(4个空格)ray_linn (三个空格并回车)
(4个空格)other  (三个空格并回车

也就是说无论标签怎么样,Beetl都会把它对文本照成的影响降到0。当然,你最好把标签格式化排号好以便于阅读,但它不会影响输出的

我用过jsp,velocity,freemarker,stringtemplate,我的印象中,他们控制标签都会对文本产生副作用。

0 请登录后投票
   发表时间:2011-08-30   最后修改:2011-08-30
....说了半天...人家的功能是让你自己来控制这些回车和空格,而不是象你的,完全是基于作者自己的假定。

如果我这么写:

[空格][空格]<#if something>${something}<#endif>


按你的所谓beetl,前面的空格就消失了,如果我输出的是python语句,那怎么办? 难道非要我在if 嵌套里放空格,在语句长短的情况下,怎么保证对齐?


所以freemarker成熟度高多了。
0 请登录后投票
   发表时间:2011-08-30  
ray_linn 写道
....说了半天...人家的功能是让你自己来控制这些回车和空格,而不是象你的,完全是基于作者自己的假定。

如果我这么写:

[空格][空格]<#if something>${something}<#endif>


按你的所谓beetl,前面的空格就消失了,如果我输出的是python语句,那怎么办? 难道非要我在if 嵌套里放空格,在语句长短的情况下,怎么保证对齐?


所以freemarker成熟度高多了。

没有消失啊

结果应该是
空格][空格]something,


原理很简单,如果同一行既有beetl,又有普通输出字符,那当然不会去删除空格了


我建议你可以试试beetl看看,下载lib,放到classpath里,运行helloworld后,自己在验证一下我说的
0 请登录后投票
   发表时间:2011-08-30  
javamonkey 写道
ray_linn 写道
....说了半天...人家的功能是让你自己来控制这些回车和空格,而不是象你的,完全是基于作者自己的假定。

如果我这么写:

[空格][空格]<#if something>${something}<#endif>


按你的所谓beetl,前面的空格就消失了,如果我输出的是python语句,那怎么办? 难道非要我在if 嵌套里放空格,在语句长短的情况下,怎么保证对齐?


所以freemarker成熟度高多了。

没有消失啊

结果应该是
空格][空格]something,


原理很简单,如果同一行既有beetl,又有普通输出字符,那当然不会去删除空格了


我建议你可以试试beetl看看,下载lib,放到classpath里,运行helloworld后,自己在验证一下我说的



那这样呢
[空格][空格]<#if something>
                  ${something} <#endif>


这就是freemarker考虑的地方,默认处理方法,永远不能替代意外情况。
0 请登录后投票
   发表时间:2011-08-31  
囧... 用惯slim了一看你们的各种模版EL就头疼...

to ls某位, 生成json明显不是用模版拼而是用Gson吧 ? ...
0 请登录后投票
   发表时间:2011-08-31  
回复ray_linn:
我刚写的一个例子,

import java.io.IOException;

import org.bee.tl.core.BeeTemplate;

public class TestCR {

public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BeeTemplate template = new BeeTemplate("  <%if(a==1){%>\n hello<%}%>");
template.set("a", 1);
template.setStatementStart("<%");
template.setStatementEnd("%>");
System.out.println(template.getTextAsString());

}

}

输出是

   hello

应该就是你想要的样子吧?

还是建议你下载一个看看。语法比freemarker好学多了,就是javascript语法。没有什么特别的
0 请登录后投票
   发表时间:2011-09-04   最后修改:2011-09-04

仔细对比了一下freemarker,确实有几个算是重要的功能在0.6版本里没有,现在加上了
1 switch case 支持
switch(exp):{
case exp1:{
........;
break;
}
defalut:{
.........
}
}

2 允许定义json 变量。然而,这我认为主要是学习beetl,并不推荐在项目有中使用
<%var userList=["joel","lucy"] %>
$userList[1]$ is girl

3 支持Map循环遍历。

4 最为重要的更新就是确认beetl回车换行,以及空格等格式化的字符,不会破坏原有文件格式。详情可以运行org.bee.testcase.FormatTestCase

可以访问 http://beetl.sourceforge.net/ 获取代码和文档

最后,对ray_linn,我说我有10余年java经验和大公司背景,只是想表达我能提供一个靠谱的软件和持续维护的能力,没有别的意思。感谢你对格式化方面的建议,我又花了一个周末来考虑beetl格式化的问题

 

0 请登录后投票
   发表时间:2011-09-13  
每周一贴,主要是周末才有时间改进代码

主要修改是将是否严格MVC控制放在语法解析阶段了,如原来计算表达式是
aexpr : mexpr ((ADD^|=MINUS^) mexpr)* ;

改成:
aexpr : mexpr ((a=ADD^|a=MINUS^) mexpr {if(isStrictMVC) throw new MVCStrictException($a);})* ;


有助于提升运行性能
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics