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>\n" +
"<head>\n" +
"\t<title>${title}</title>\n" +
"</head>\n" +
"<body>\n" +
"\t<h1>${name}</h1>\n" +
"</body>\n" +
"</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>\n" +
"<head>\n" +
"\t<title>This is a test template Email.</title>\n" +
"</head>\n" +
"<body>\n" +
"\t<h1>beetl</h1>\n" +
"<%" +
" for(entry in map){" +
" print(entry.key+\":\"+entry.value);}%>"+
"</body>\n" +
"</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");
}
%>
Beetl模板引擎入门教程的更多相关文章
- .net 开源模板引擎jntemplate 教程:基础篇之语法
一.基本概念 上一篇我们简单的介绍了jntemplate并写了一个hello world(如果没有看过的,点击查看),本文将继续介绍jntemplate的模板语法. 我们在讲解语法前,首先要了解一下标 ...
- .net 开源模板引擎jntemplate 教程:基础篇之在ASP.NET MVC中使用Jntemplate
在ASP.NET MVC 中使用Jntemplate 上一篇我们详细介绍了jntemplate的标签语法,本篇文章将继续介绍如何在ASP.NET MVC 中使用Jntemplate. 一.使用Jnte ...
- SpringBoot集成beetl模板快速入门
SpringBoot集成beetl模板快速入门 首次探索 beetl官方网址:http://ibeetl.com/ 创建SpringBoot工程(idea) 新建工程 选择创建Spring工程 书写包 ...
- HTML5模板引擎 Thymeleaf 教程(转)
原文:http://www.open-open.com/lib/view/open1383622135586.html Thymeleaf是一个XML/XHTML/HTML5模板引擎,可用于Web与非 ...
- Velocity模板引擎入门
类似于PHP中的Smarty,Velocity是一个基于Java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java代 ...
- thymeleaf模板引擎入门
ThymeLeaf是什么 Thymeleaf是一个用于服务器端的java模板引擎,它使用简单但功能强大,目前可以处理的模板类型包括:HTML.XML.TEXT.JavaScript.CSS等. 搭建t ...
- 【Python-Django】Jinja2模板引擎配置教程详解!!!!
Jinjia2的官方文档:http://jinja.pocoo.org/docs/2.10/ 1. 安装Jinja2扩展包 $ pip install Jinja2 2. 配置Jinja2模板引擎 T ...
- beetl模板引擎使用笔记
maven项目pom: <dependency> <groupId>com.ibeetl</groupId> <artifactId>beetl< ...
- FreeMarker数据模板引擎全面教程mark
http://blog.csdn.net/fhx007/article/details/7902040/#comments 以下内容全部是网上收集: FreeMarker的模板文件并不比HTML页面复 ...
随机推荐
- .Net Identity OAuth 2.0 SecurityStamp 使用
起源: 近期帮别人做项目,涉及到OAuth认证,服务端主动使token失效,要使对应用户不能再继续访问,只能重新登陆,或者重新授权. 场景: 这种场景OAuth2.0是支持的,比如用户修改了密码,那所 ...
- abi-api, arm target triplet https://en.wikipedia.org/wiki/ARM_architecture
GNU软件用target triplet来描述工作平台,target triplet是一种规范化的名称,形如cpu-vendor-os(where os can be ‘system’ or ‘ker ...
- kubernetes应用的各种访问方式
1. 通过 Pod 的 IP 地址访问应用 1.1 Pod 的IP地址 每个Pod 都会被分配一个IP地址,比如下面这儿pod的IP地址是 10.1.79.11. root@kub-node-0:/h ...
- CF1003E Tree Constructing 构造+树论
正解:构造 解题报告: 传送门! 这题麻油翻译鸭,,,那就先大概港下题意趴QAQ 构造一棵n个点,直径为d,每个点点度不超过k的树 这题其实我jio得还是比较简单的趴,,, 首先构造出一条直径,就是一 ...
- Android应用之——百度地图最新SDK3.0应用,实现最经常使用的标注覆盖物以及弹出窗覆盖物
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/yanglfree/article/details/33333413 一.概述 最新版的百度地图SDK ...
- 走进C++程序世界------IO标准库介绍
流概述 流是C++标准的组成部分,流的主要目标是,将从磁盘读取文件或将输入写入控制台屏幕的问题封装起来,创建流后程序猿就能够使用它.流将负责处理全部的细节. IO类库 在C++输入、输出操作是通 ...
- 人活着系列之芳姐和芳姐的猪(Floyd)
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2929 这个题一方面数据水,另一方面就是思维水, ...
- Linux实验楼学习之一
查看当前所在目录 pwd 创建文件:1-1.txt touch 1-1.txt 进入统计目录下的etc目录 cd /etc 强行终止当前程序 Ctrl + c 常用快捷键 按键 作用 Ctrl+d 键 ...
- 对比jQuery和AngularJS的不同思维模式
jQuery是dom驱动,AngularJS是数据驱动,这里有一篇文章阐述的非常好,建议看看 本文来自StackOverFlow上How do I “think in AngularJS” if I ...
- 支持向量机:Numerical Optimization,SMO算法
http://www.cnblogs.com/jerrylead/archive/2011/03/18/1988419.html 另外一篇:http://www.cnblogs.com/vivouni ...