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

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

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

一、安装

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

com.ibeetl

beetl-framework-starter

1.1.55.RELEASE

二、直接上手

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="\n" +

"

\n" +

"\t

${title}\n" +

"\n" +

"

\n" +

"\t

${name}

\n" +

"\n" +

"";

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例子就完成了,你可以运行一下试试看。渲染成功的结果应该是这样的:

This is a test template Email.

beetl

三、使用Map绑定

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

//...

Map map=new HashMap()

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="\n" +

"

\n" +

"\t

This is a test template Email.\n" +

"\n" +

"

\n" +

"\t

beetl

\n" +

"

" for(entry in map){" +

" print(entry.key+\":\"+entry.value);}%>"+

"\n" +

"";

Template t = gt.getTemplate(testTemplate);

Map data=new HashMap();

data.put("test","213");

data.put("aaa","123");

//把map类型数据绑定到占位符map上,但在Beetl中使用循环时不需要用${}

t.binding("map",data);

String str = t.render();

System.out.println(str);

}

输出结果:

This is a test template Email.

beetl

aaa:123test:213

五、条件语句

条件语句跟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模板使用场景_Beetl模板引擎入门教程相关推荐

  1. ue4怎么用虚幻商城场景_【更新】UE4虚幻引擎野外场景制作零基础入门教程

    原标题:[更新]UE4虚幻引擎野外场景制作零基础入门教程 作为一套零基础入门教程,可以帮助虚幻4引擎的新手了解到环境制作流程和相关软件的配合.本教学适合零基础入门用户,不适合有一定经验的UE使用者. ...

  2. php smarty if,smarty 模板if else使用实例与入门教程

    标签是给Smarty的指令符,以模板定界符包住.这些指令符可以是变量,以$符号代表函数.逻辑 或 流程控制 语法.Smarty 允许 PHP 程式设计师以Smarty 标签去定义可存取的函数 smar ...

  3. beetl模板使用场景_Java 模板引擎 Beetl 2.0 发布

    Java开源模板引擎 Velocity Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由 ...

  4. PhysX物理引擎入门教程

    原文地址:http://blog.sina.com.cn/s/blog_622e51850100f8pc.html 一.安装 在国际上,出名的物理引擎有Havok,Vortex,ODE,Novodex ...

  5. G6 图可视化引擎——入门教程——前言

    什么是 G6 G6 是一个图可视化引擎.它提供了图的绘制.布局.分析.交互.动画等基础的图可视化能力.旨在让关系变得透明,简单.让用户获得关系数据的 Insight. 入门教程简介 我们在本入门教程中 ...

  6. activiti工作流引擎入门教程

    activiti简介 Activiti项目是一项新的基于Apache许可的开源BPM平台,从基础开始构建,旨在提供支持新的BPMN 2.0标准. Activiti是一种轻量级,可嵌入的BPM引擎,而且 ...

  7. G6 图可视化引擎——入门教程——绘制 Tutorial 案例

    本文将进行 Tutorial 案例的简单绘制和配置.通过本文,你将知道创建一般图时一些常用的配置项及其作用. 基础绘制 创建容器 需要在 HTML 中创建一个用于容纳 G6 绘制的图的容器,通常为 d ...

  8. G6 图可视化引擎——入门教程——元素及其配置

    图的元素特指图上的节点 Node 和边 Edge .在上一章节中,我们已经将 Tutorial 案例的图绘制了出来,但是各个元素及其 label 在视觉上很简陋.本文通过将上一章节中简陋的元素美化成如 ...

  9. Reinforcement Learning | 强化学习十种应用场景及新手学习入门教程

    文章目录 1.在自动驾驶汽车中的应用 2.强化学习的行业自动化 3.强化学习在贸易和金融中的应用 4.NLP(自然语言处理)中的强化学习 5.强化学习在医疗保健中的应用 6.强化学习在工程中的应用 7 ...

  10. TensorFlow人工智能引擎入门教程之二 CNN卷积神经网络的基本定义理解。

    摘要: 这一章节我们将 tensorFlow怎么实现卷积神经网络 ,CNN ,其实CNN可以用来训练声音的,不过效果一般,所以一般都用于图像方面,因为图像像素局部共享 参数共享 ,图像金字塔法则.可以 ...

最新文章

  1. PCE:南农沈其荣团队根系分泌物驱动土壤-微生物-养分之间的反馈作用以响应植物的生长...
  2. 认真工作的原因以及方法
  3. SAP关于销售来自可选工厂的解决方案
  4. 【Java NIO】一文了解NIO
  5. 驱动框架1——什么是驱动框架?
  6. 超过屏幕长度字符省略
  7. Linux基础命令与进阶
  8. electron 使用 node-ffi 调用 C++ 动态链接库(DLL)
  9. 计算机机房辐射大吗6,我的办公室离机房只有一墙之隔,请问对孕妇辐射大吗?我们单位10多个电脑的交换机。...
  10. 华为校园招聘面试题目及流程
  11. 第五人格PC端下载以及解决打不开问题
  12. Wooboo斥千万巨资 加快手机程序整合步伐
  13. 简单搜索引擎使用技巧
  14. 浏览器页签icon图标的设置和获取
  15. 达梦数据库:备份 冷备与热备
  16. 光伏发电站|太阳能电池板辐照度(4G)无线直流电压汇集电流测量采集监控技术方案
  17. 周末交友好运气:请找中国张名记
  18. 如何在面试中介绍自己的项目
  19. 电子元器件搜索引擎 白嫖AD原理图符号、PCB封装和3D模型(超详细)
  20. cmd 定时关机 命令

热门文章

  1. js 微信聊天框的时间显示规则,以及输出的时间格式(已优化)
  2. 高压油管matlab,高压油管的压力及流量控制
  3. 戴尔t310服务器装系统步骤,dell笔记本重装系统教程
  4. Few-Shot Object Detection with Attention-RPN and Multi-Relation Detector论文解读
  5. 儿童专注力训练——虚线描成实现
  6. java设置png dpi_设置PNG图片DPI 信息,保存为PDF(使用Magick),与OpenCV转换
  7. 网易详述8个月全过程:员工申请仲裁要求支付61万赔偿
  8. mysql 跨库查询_mysql跨库联表查询
  9. 飞桨day-03 人脸关键点检测实践作业
  10. C语言运行窗口中的暂停与清屏