Velocity 局部定制模板

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
时间: 2024-10-10 21:39:31

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

spring+velocity+javamail发送模板邮件

有时候当我们注册完的时候系统会提示有一封邮件发送到了你的邮箱,如何做呢? 就要用到spring+velocity+javamail这3个玩意,其实只用了spring,因为其他2个都被spring集成了. 先看代码 package com.worthtech.app.util; import java.io.File; import java.util.Map; import javax.mail.MessagingException; import javax.mail.internet.Mim

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

springmvc-servlet.xml配置 <!-- Velocity --> <bean id="velocityViewResolver" class = "org.springframework.web.servlet.view.velocity.VelocityViewResolver"> <property name="order" value="0" /> <prope

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

1.先定义一个类文件,将要定义的信息写入类文件 比如我每次写一个命令都是这个套路,要继承接口,要写上相应的特性,每次都 是重复的工作: 2.提取类模板 项目=>导出模板 这里你可以导出项目模板和项模板,我们这里选中项模板,项目选中你刚才编写模板类所在的项目,然后下一步: 选中模板类,下一步: 选中依赖的dll,下一步: 填入相应的信息,注意要勾选“自动将模板导入Visual Studio”,然后完成! 这样我们就可以在项目模板目录下面找到刚导出的项目板: 3.修改相关信息 现在导出到信息都是写死

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

velocity velocity三种reference 变量:对java对象的一种字符串化表示,返回值调用了java的toString()方法的结果. 方法:调用的是对象的某个方法,该方法必须是public的,返回值也是toString(),方法的参数也必须为String的. 属性:除了访问java的类属性外,等价于get..()方法. 基本符号 1."#"来标识velocity的脚本语句. 2."$"来标识一个对象(或者变量). 3."{}"

velocity模板加载

http://hi.baidu.com/ly_dayu/item/828b09c5c3c5e547a8ba9409 velocity使用基本来说比较简单,但在加载模板时老出问题,很多初学者经常会遇到找不到模板这种异常.本文就针对目前常用的三种模板加载方式做以说明.  一.velocity默认的加载方式(文件加载方式) Java代码   package com.velocity.test; import java.io.StringWriter; import java.util.Properti

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

velocity velocity三种reference 变量:对java对象的一种字符串化表示,返回值调用了java的toString()方法的结果. 方法:调用的是对象的某个方法.该方法必须是public的.返回值也是toString(),方法的參数也必须为String的. 属性:除了訪问java的类属性外,等价于get..()方法. 基本符号 1."#"来标识velocity的脚本语句. 2."$"来标识一个对象(或者变量). 3."{}"

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

基于 Java 的网站开发,很多人都采用 JSP 作为前端网页制作的技术,尤其在是国内.这种技术通常有一些问题,我试想一下我们是怎样开发网站的,通常有几种方法: 1:功能确定后,由美工设计网页的UI(界面)部分,然后由程序员在其上加入代码显示逻辑(比如循环,判断显示数据结果).也就是通常的 jsp 页面制作,当然这部分可以由美工完成模板,然后由 jsp 工程师再继续以它为原型创建相应的 jsp 页面. 2:功能确定后,由美工设计网页的UI(界面)部分,然后由网页制作人员在其上加入代码显示逻辑(比

最好的模板引擎Beet的6大创新点

2011年发布Beetl 0.5的时候,新闻是在Iteye上发布的,老资格程序员可能预料Iteye上会发生什么了,我收到的最多的不是鼓励和喝彩,而是吐槽,"又是一个轮子"是里面最大的声音.尽管4年前的版本还只是个雏形,但实际上已经开始有了与众不同创新点.我将在本文介绍一下Beetl的创新点和创新思路,希望有志从事开源开发的人能借鉴 首先,Beetl是一个脚本风格的模板,这顺应了新时代程序员的审美. freemarker 当初为什么能从模板引擎中脱颖而出,其实与当时XML流行无不关系.程

《开源框架那点事儿23》:Tiny模板语言(VelocityPlus)初步入门

2 Tiny模板语言概述 3 Tiny模板语言能为您做什么? 4 Tiny模板语言简介 5 Hello Tiny! 6 注释 7 引用(References) 7.1 变量(variables) 7.2 属性(properties) 7.3 方法(methods) 8 表达式(Expression) 8.1 取值表达式 8.2 Map常量 8.3 数组常量 8.4 其他表达式 9 索引表示法 10 渲染 11 与Java无缝对接 12 模板布局 13 指令集 13.1 #set指令 13.2 条