zoukankan      html  css  js  c++  java
  • Beetl模板引擎入门教程

    最近项目中有个邮件发送的需求,不过要求发送的HTML格式的邮件。由于Beetl对java语言的良好支持和很好的性能,我们决定使用Beetl作为我们的模板引擎。

    Beetl官网已经有了很详细的教程,所以本篇侧重于实战应用,适合需要不懂beetl或其他模板引擎但需要快速上手写出代码的人。

    那么为什么要用模板引擎呢?很简单的原因,实际应用场景中文本的格式是固定的,但是内容有所不同。如果是不复杂的内容我们可以直接用代码生成需要的文本。但是当文本变得复杂的时候,我们用java生成文本的性能就会下降,同时也不利于维护。解决办法是将数据和格式进行分离,将一个文本分成模板和数据。模板中有固定的格式,需要动态变化的数据一般用占位符代替。这样我们想改模板格式的时候不需要去更改代码,只需要去改模板就可以了。同时模板引擎渲染文本的效率也会更高。

    一、安装

    Maven项目直接添加下面的依赖。

    		<dependency>
                <groupId>com.ibeetl</groupId>
                <artifactId>beetl-framework-starter</artifactId>
                <version>1.1.55.RELEASE</version>
            </dependency>
    

    二、直接上手

    Beetl的核心是GroupTemplate,创建GroupTemplate需要俩个参数,一个是模板资源加载器,一个是配置类。

        public void BeetlString() throws Exception {
            //new一个模板资源加载器
            StringTemplateResourceLoader resourceLoader = new StringTemplateResourceLoader();
            /* 使用Beetl默认的配置。
             * Beetl可以使用配置文件的方式去配置,但由于此处是直接上手的例子,
             * 我们不去管配置的问题,只需要基本的默认配置就可以了。
            */
            Configuration config = Configuration.defaultConfiguration();
            //Beetl的核心GroupTemplate
            GroupTemplate groupTemplate = new GroupTemplate(resourceLoader, config);
            //我们自定义的模板,其中${title}就Beetl默认的占位符
            String testTemplate="<html>
    " +
                    "<head>
    " +
                    "	<title>${title}</title>
    " +
                    "</head>
    " +
                    "<body>
    " +
                    "	<h1>${name}</h1>
    " +
                    "</body>
    " +
                    "</html>";
            Template template = groupTemplate.getTemplate(testTemplate);
            template.binding("title","This is a test template Email.");
            template.binding("name", "beetl");
            //渲染字符串
            String str = template.render();
            System.out.println(str);
        }
    

    Beetl的使用很简单,我们首先需要一个模板资源加载器(实际上有六种不同的模板资源加载器),和Beetl的配置来创建Beetl核心GroupTemplate。

    第二步,我们需要通过GroupTemplate将自己定义的String模板加载为Beetl模板——Template。

    第三步,我们使用template中的操作,将数据和占位符绑定。

    第四步,渲染最终的文本。

    这样一个简单的Beetl例子就完成了,你可以运行一下试试看。渲染成功的结果应该是这样的:

    <html>
    <head>
    	<title>This is a test template Email.</title>
    </head>
    <body>
    	<h1>beetl</h1>
    </body>
    </html>
    

    三、使用Map绑定

    上面的例子中只有两个参数,我们单个绑定也不会觉得麻烦。实际使用可能会有相当多的参数,这时候我们直接绑定就会变得麻烦。Beetl支持使用Map来绑定参数。

    	//...
    	Map<String,String> map=new HashMap<String,String>()
        map.put("name", "beetl");
        map.put("title","This is a test template Email.");
        template.binding(map);
    	//...
     
    

    可以试着优化一下代码结构来更好地让数据和模板分离,比如函数的参数传入一个map。

    四、使用循环语句

    上一步我们使用了Map来绑定,这次我们要试试传入Map格式的数据,并在Beetl模板中使用循环语句遍历Map。

    Beetl支持丰富的循环方式,如for-in,for(exp;exp;exp),以及while循环,以及循环控制语句break;continue; 另外,如果没有进入for循环体,还可以执行elsefor指定的语句。

    模板中使用Beetl语法需要用<% %> 括起来。以下例子来自官方文档:

    <%
    for(entry in map){
            var key = entry.key;
            var value = entry.value;
            print(value);
    }
    %>
    

    我们给出一个实际的例子:

       public void BeetlString() throws Exception {
            //...
            String testTemplate="<html>
    " +
                    "<head>
    " +
                    "	<title>This is a test template Email.</title>
    " +
                    "</head>
    " +
                    "<body>
    " +
                    "	<h1>beetl</h1>
    " +
                    "<%" +
                    " for(entry in map){" +
                    "   print(entry.key+":"+entry.value);}%>"+
                    "</body>
    " +
                    "</html>";
            Template t = gt.getTemplate(testTemplate);
            t.fastBinding(map);
            Map<String,String> data=new HashMap<String,String>();
            data.put("test","213");
            data.put("aaa","123");
           	//把map类型数据绑定到占位符map上,但在Beetl中使用循环时不需要用${}
            t.binding("map",data);
            String str = t.render();
            System.out.println(str);
        }
    

    输出结果:

    <html>
    <head>
    	<title>This is a test template Email.</title>
    </head>
    <body>
    	<h1>beetl</h1>
    aaa:123test:213</body>
    </html>
    

    五、条件语句

    条件语句跟js的语法基本一致,没有特别的地方。但是请注意<%%>中不能使用占位符,否则会报错。

    以下内容来自官方文档

    if else

    同js一样,支持if else,如下例子

    <%
    var a =true;
    var b = 1;
    if(a&&b==1){
    
    }else if(a){
    
    }else{
    
    }
    %>
    
    
    switch-case

    同js一样,支持switch-case,如下例子

    <%
    var b = 1;
    switch(b){
            case 0:
                    print("it's 0");
                    break;
            case 1:
                    print("it's 1");
                    break;
            default:
                    print("error");
    }
    %>
    
    

    switch变量可以支持任何类型,而不像js那样只能是整形

    select-case

    select-case 是switch case的增强版。他允许case 里有逻辑表达式,同时,也不需要每个case都break一下,默认遇到合乎条件的case执行后就退出。

    <%
    var b = 1;
    select(b){
            case 0,1:
                    print("it's small int");
            case 2,3:
                    print("it's big int");
            default:
                    print("error");
    }
    %>
    
    

    select 后也不需要一个变量,这样case 后的逻辑表达式将决定执行哪个case.其格式是

    <%
    select {
            case boolExp,orBoolExp2:
                    doSomething();
    }
    %>
    
    <%
    var b = 1;
    select{
            case b<1,b>10:
                    print("it's out of range");
                    break;
            case b==1:
                    print("it's 1");
                    break;
            default:
                    print("error");
    }
    %>
    
  • 相关阅读:
    ant desigon Upload控件能否提供隐藏删除图标的属性以及鼠标停留在删除图标上的提示文字怎么设置为中文
    2月5日进度
    2月4日学习进度
    2月3日学习进度
    2月2日学习进度
    大数据之linux环境下jdk hadoop以及hbase,hive等配置
    MVC实例
    MVC简介
    23种设计模式
    xxx系统可用性和易用性分析
  • 原文地址:https://www.cnblogs.com/rever/p/9321956.html
Copyright © 2011-2022 走看看