Beetl 专用博客

将beetl专门放在网易轻博客上,以后除非有版本发布,就不在此处发布关于beetl的文章。

 

http://beetl.lofter.com/

 

摘抄一些内容如下

 

Beetl与Freemarker 比较

一章一章的看了Freemarker官方网站的使用说明,觉得Beetl功能与Freemarker功能应该是差不多的。打算在Beetl正式发布前,也按照Freemarker文档的组织结构,写一个对应的详细使用说明

Beetl的优势在于
使用更简单 : 类似javascript语法,不用额外的学习成本
更小 :大小不到350K
更具有扩展性 :支持自定义函数,文本处理函数(标签),格式化函数
MVC限制 :即允许严格的MVC限制,也允许使用标准MVC限制 , 也允许打开后门,直接调用java类,支持这三种MVC限制
对原文件无侵入性 :众所周知,文件一旦变成模板,就不在是文件,只能被模板引擎识别,Beetl模板对原文件侵入性很低

更好性能 :可以在运行时优化成java代码,具有最高效的使用

 

 

 

编译成class后的错误处理很赞
大多数web容器对JSP运行的错误处理不好,虽然打印出错误栈,但很难让开发者找到错误行。对于Beetl来说,默认的错误处理不仅打出错误栈,而且还显示出模板文件所在行数已经上下3行的内容:如下
一个简单的模板如下
<%
var a= 3;
var b = 2/0;
%>
$b$

运行后会打印出如下信息
ERROR 位于3行
1|<%
2|var a= 3;
3|var b = 2/0;
4|%>
5|$b$
java.lang.ArithmeticException: / by zero
    at test.first_html.service(first_html.java:15)
    at org.bee.tl.core.PreCompiledClass.service(PreCompiledClass.java:170)
    at org.bee.tl.core.CompiledBeeTemplate.runAsPreCompiledClass(CompiledBeeTemplate.java:86)
    at org.bee.tl.core.CompiledBeeTemplate.getText(CompiledBeeTemplate.java:52)
    at org.bee.tl.core.AbstractTemplate.getTextAsString(AbstractTemplate.java:91)
    at org.bee.tl.core.GroupTemplate.main(GroupTemplate.java:429)

 

 

Beetl switch 例子
<%
var str = "beetl";
var a = 0;
switch(str){
    case "velocity":{
        a = 0;
        break;
    }
    case "freemarker":{
        a = 1;
        break;
    }
    case "beetl":{
        a = 3;
        break;
    }
}
%>
$a$

将会编译成如下代码

 public void service(Writer writer,Context ctx) throws IOException,BeeException{
        ctx.set("____group",group);
        ctx.set("____this",template);
        BeetlWriter out = new BeetlWriter(writer,this);
        String str="beetl";
        int a=0;
        List _caseList15_0 = new ArrayList();_caseList15_0.add("velocity");_caseList15_0.add("freemarker");_caseList15_0.add("beetl");
        switch(_caseList15_0.indexOf(str)){
        case 0:{
            a=0;
            break;
        }
        case 1:{
            a=1;
            break;
        }
        case 2:{
            a=3;
            break;
        }

        }
        out.write(a);
        out.write(__VCR);
    }
    /* 原模板中的所有字符串定义到这儿*/
    private static char[] __VCR = "\r\n".toCharArray();
    /* 原模板Cached标示*/
    public long getVersion(){
        return 1321085218968l;
    }

 

 

 


Missing Value
可以在变量后面加 !字符串 指示Beetl 如果变量为空,则显示!后面的字符串,如下例子
$user.wife.bir!'N/A',dateformat$ ;
如果user为空,或者user.wife为空,则显示"N/A",可以看看编译后的代买片段

 if(user!=null&&user.getWife()!=null){
          out.write(user.getWife().getBir(),"dateformat");
 }else{
           out.write("N/A");
}

 

你可能感兴趣的:(etl)