Velocity介绍

Velocity是一个基于java的template engine。它允许Web designer引用Java Code中定义的方法。Web designer可以和Java工程师根据MVC模型并发编程。也就是说,Velocity使得Java开发和网页开发分离。

Velocity还可以根据template可以生成web pages, SQL, PostScript和其他输出,或者和其他系统的组件集成。

Velocity Template Language(VTL)

VTL在web site中使用reference嵌入动态内容。变量是reference的一种。比如下面的例子

#set( $a = "Velocity" )

这条VTL语句,#set是指令,$a是变量。String值的变量使用单引号或者双引号括起来,单引号表示raw string,双引号或得到解析后的值。

Rule of thumb: References begin with $ and are used to get something. Directives begin with # and are used to do something.

Reference

VTL有三种reference: 变量, properties和方法。作为使用VTL的设计者,你和你的工程师必须就reference的名字达成一致。这是协议!

  • 变量,以#开头,然后就是identifier。比如 $foo
  • properties,有独特的格式。比如 $customer.name,它可以是map中key=name的值,也可以作为方法调用的缩写
  • 方法,和properties格式相近。比如 $customer.getAddress or $customer.Address

从Velocity 1.6开始,所有array reference被看做是固定长度的list。这意味着你可以在array reference上使用 java.util.List所有方法

Directive

Reference允许template designer在web sites中生成动态内容。指令——使用脚本元素操作Java code的输出

  • #set 用来给变量赋值,只可以是reference类型(变量,properties和methods),literal类型(string, number), arraylist or map
  • #if / #else / #elseif
  • #foreach,遍历
  • #include,原地import本地文件,但是内容不被rendered
  • #parse,不仅可以import VTL文件,还可以parse & render
  • #evaluate,动态evaluate VTL。This allows the template to evaluate a string that is created at render time
  • #block,定义VTL代码块
  • #macro,定义宏
  • ...

Example

最近遇到一个需要局部定制template的case。这要求template能动态render

JavaCode

public void test1() {

VelocityEngine velo = new VelocityEngine();

velo.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath");

velo.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName());

velo.init();

VelocityContext context = new VelocityContext();

Map<String, String> alert = new HashMap<>();

alert.put("timestamp", "20160719");

alert.put("policy", "policy description");

String tpl = "<ul><li>cluster:${alert.timestamp}</li><li>colo:${alert.policy}</li></ul>";

context.put("tpl" , tpl);

context.put("alert", alert);

Template tmpl = velo.getTemplate("ALERT_TEST.vm");

StringWriter writer = new StringWriter();

tmpl.merge(context, writer);

LOG.info(writer.toString());

}

ALERT_TEST.vm

...

#evaluate($tpl)

Useful Links

  • Velocity中文入门

    • https://github.com/putaoshu/jdf/blob/master/doc/core_vm.md
    • http://www.cnblogs.com/yasin/archive/2010/04/02/1703188.html
  • Velocity官网

    • http://velocity.apache.org/engine/1.7/user-guide.html#user-guide-contents
  • Bosun Template 
    • https://golang.org/pkg/text/template/
  • Bosun官网 
    • https://bosun.org/quickstart

Velocity 局部定制模板的更多相关文章

  1. 使用javaMail和velocity来发送模板邮件

    之前在ssh项目中有用过javaMail和velocity来发送邮件,实现的效果如下所示. 这类邮件主要用于公司的推广宣传,比如商城的促销等场景. 今天打算将邮件模块也集成到ssm项目,也算是对之前做 ...

  2. springmvc 配置多视图,返回jsp,velocity,freeMarker,tiles(模板)等等

    springmvc-servlet.xml配置 <!-- Velocity --> <bean id="velocityViewResolver" class = ...

  3. Visual Studio 定制模板类---详细步骤

    1.先定义一个类文件,将要定义的信息写入类文件 比如我每次写一个命令都是这个套路,要继承接口,要写上相应的特性,每次都 是重复的工作: 2.提取类模板 项目=>导出模板 这里你可以导出项目模板和 ...

  4. Model元数据定制与Model模板

    元数据这一词对于计算机科学来说不算陌生,对元数据的解释最简单的解释就是描述数据的数据,那么Model元数据当然是描述Model中各种成员的数据了,在ASP.NET MVC中ModelMetadata这 ...

  5. 转 如何使用velocity模板引擎开发网站

    基于 Java 的网站开发,很多人都采用 JSP 作为前端网页制作的技术,尤其在是国内.这种技术通常有一些问题,我试想一下我们是怎样开发网站的,通常有几种方法: 1:功能确定后,由美工设计网页的UI( ...

  6. unity之定制脚本模板

    1.unity的脚本模板        新版本unity中的C#脚本有三类,第一类是我们平时开发用的C# Script:第二类是Testing,用来做单元测试:第三类是Playables,用作Time ...

  7. velocity模板加载

    http://hi.baidu.com/ly_dayu/item/828b09c5c3c5e547a8ba9409 velocity使用基本来说比较简单,但在加载模板时老出问题,很多初学者经常会遇到找 ...

  8. velocity(vm)模板引擎基本语法

    for循环 #foreach($acc in $!{param.tools}) #set($count = $count + 1) <li custom-data="$!{acc.or ...

  9. (二)模板引擎之Velocity脚本基本的语法全

    velocity velocity三种reference     变量:对java对象的一种字符串化表示,返回值调用了java的toString()方法的结果.     方法:调用的是对象的某个方法. ...

随机推荐

  1. 【Swift】Alamofile网络请求数据更新TableView的坑

    写这篇BLOG前,有些话不得不提一下,就仅当发发恼骚吧... 今天下午为了一个Alamofire取得数据而更新TableView的问题,查了一下午的百度(360也是见鬼的一样),竟然没有一个简单明了的 ...

  2. 开发管理系统时,安装sqlserver2005问题整理

    最近在为单位开发一个综合管理系统.但是由于时间的问题,有时候就把程序带回家进行修改.但是家里有没有环境,就把数据库文件和程序带回家,可是随之问题来了.要重新在家里陪着开发环境,vs2008非常快的就安 ...

  3. 绘制扇形效果线条小Bug解决

    绘制线条基本代码: 变量: CPoint m_ptOrigin;//起点坐标 bool m_bTrue;//检查鼠标左键是否按下 CPoint m_ptOldOrigin;//记录上一次绘制终点坐标, ...

  4. [No0000AE]在 Visual Studio 中调试 XAML 设计时异常

    在 Visual Studio 中进行 WPF, UWP, Silverlight 开发时,经常会遇到 XAML 设计器由于遭遇异常而无法正常显示设计器视图的情况.很多时候由于最终生成的项目在运行时并 ...

  5. jQuery选择器和选取方法 http://www.cnblogs.com/MaxIE/p/4078869.html

    我们已经使用了带有简单Css选择器的jQuery选取函数:$().现在是时候深入了解jQuery选择器语法,以及一些提取和扩充选中元素集的方法了. 一.jQuery选择器 在CSS3选择器标淮草案定义 ...

  6. BZOJ1298[SCOI2009]骰子的学问

    Description Input 第一行为两个整数n, m.第二行有n个整数,为a1,a2, -, an. Output 包含n行,每行m个1~n×m的正整数,各不相同,以空格分开.如果有多解,输出 ...

  7. 信鸽推送 10004,os文件配置出错,解决办法

    信鸽推送注册失败 返回码 10004 是 os  配置出现问题 经过询问客服,得到以下解决办法 将SDK中的so文件复制下来 新建文件夹jniLibs,并将 so 配置文件粘贴进去 便可完成注册

  8. lua命令行编译

    http://jingyan.baidu.com/article/359911f551917457fe0306e5.html 最后将生成的.exe解释器的根目录配置到系统环境变量 copy lua.c ...

  9. Oracle时间戳(毫秒)转为Date

    1.SQL ) + TO_DATE('1970-01-01 08:00:00', 'YYYY-MM-DD HH:MI:SS'), 'YYYY-MM-DD HH:MI:SS') AS CDATE FRO ...

  10. html5拖拽事件 xhr2 实现文件上传 含进度条

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...