https://blog.csdn.net/icannotdebug/article/details/79725297

一、简介

Velocity 是一个基于 Java 的模板引擎框架,提供的模板语言可以使用在 Java 中定义的对象和变量上
说白了就类似于jsp,java中定义对应的对象,模板载入后,可以对象信息动态加载入模板

二、使用方式

1、引入pom(老生常谈)

<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>

最新的开发包和maven配置

2、创建模板文件(Hellovelocity.vm)

#set( $iAmVariable = "good!" )
Welcome $name to velocity.com
today is $date.
#foreach ($i in $list)
$i
#end
$iAmVariable

3、编写测试main

import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.runtime.RuntimeConstants;
import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader; import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @author: <a href="mailto:wb-lzl282164@alibaba-inc.com">李智龙</a>
* @date: 2018/3/28
*/
public class HelloVelocity {
public static void main(String[] args) {
VelocityEngine ve = new VelocityEngine();
ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath");
ve.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName());
ve.init();
// 载入(获取)模板对象
Template t = ve.getTemplate("hellovelocity.vm");
VelocityContext ctx = new VelocityContext();
// 域对象加入参数值
ctx.put("name", "李智龙");
ctx.put("date", (new Date()).toString());
// list集合
List temp = new ArrayList();
temp.add("1");
temp.add("2");
ctx.put("list", temp); StringWriter sw = new StringWriter();
t.merge(ctx, sw); System.out.println(sw.toString());
}
}

4、打印结果

Welcome 李智龙 to velocity.com
today is Wed Mar 28 11:03:04 CST 2018.
1
2
good!

三、使用模板的目的

如果说使用模板生成java代码,或者开发对应的代码,目前有很多封装好的更好用的开源框架,

使用Velocity自己编写一个适用的框架也是可以的(很蛋疼吧)。
不过个人觉得Velocity最好的使用场景,是在文件模板的生成方面,现在有很多场景需要打印报表,

生成对应的文件,而Velocity便是一个过渡的比较好用的轻量的插件。后面也会提供相应的例子

Velocity模板引擎实战:动态生成HTML、Word、Excel等报表

四、模板的基本语法

1、定义变量

#set($name =“Jackie”)
#set($hello =“hello $name”)
Jackie赋值给$name,此时$hello的值为hello Jackie

2、变量使用

模板文件可以使用name或

{name}定义变量,建议使用后者,name和

names 的两个变量,如果不选用大括号的话,引擎就没有办法正确识别$names 这个变量。

3、循环

#foreach($element in $list)
This is $element
$velocityCount
#end

4、条件语句

#if(condition)
...
#elseif(condition)

#else

#end

5、关系操作符

AND、OR 和 NOT 操作符,分别对应&&、||和! 

6、函数

#macro(macroName arg1 arg2 …)
...
#end
// 对应函数
#macroName(arg1 arg2 …)

示例

#macro(sayHello $name)
hello $name
#end
#sayHello(“velocity”)

7、解析和引入模板

temp.vm 文件:

#set($name =“velocity”)

parse.vm:

#parse(“temp.vm”)
输出结果为:velocity

include.vm:

#include(“temp.vm”)
输出结果为:#set($name =“velocity”)

Java使用 VelocityEngine模板引擎快速生成HTML等各种代码的更多相关文章

  1. 使用 Velocity 模板引擎快速生成代码(zhuan)

    http://www.ibm.com/developerworks/cn/java/j-lo-velocity1/ ****************************************** ...

  2. 使用Velocity 模板引擎快速生成代码

    Velocity 模板引擎介绍 在现今的软件开发过程中,软件开发人员将更多的精力投入在了重复的相似劳动中.特别是在如今特别流行的MVC架构模式中,软件各个层次的功能更加独立,同时代码的相似度也更加高. ...

  3. 转: 使用 Velocity 模板引擎快速生成代码

    from:https://www.ibm.com/developerworks/cn/java/j-lo-velocity1/ 评注: 1. velocity 的基本语法 2. 生成代码的用法.

  4. 使用 Velocity 模板引擎快速生成代码

    http://www.ibm.com/developerworks/cn/java/j-lo-velocity1/

  5. SpringBoot获取Freemarker模板引擎,生成HTML代码

    今天用Ajax异步添加评论,加载Freemarker模板引擎,生成模板模块 1.新建Freemarker模板 <li id="${comment.oId}"> < ...

  6. 使用VTemplate模板引擎动态生成订单流程图

    1.VTemplate模板引擎的简介 VTemplate模板引擎也简称为VT,是基于.NET的模板引擎,它允许任何人使用简单的类似HTML语法的模板语言来引用.NET里定义的对象.当VTemplate ...

  7. 使用Themleaf 模板引擎手动生成html文件

    1.为什么要写这一篇呢? 在做一个邮件发送功能的时候,需要发送html邮件,javaMail 发送html 的时候需要有已经生成的html正文,所以需要提前将要发送的内容生成,所以就需要模板引擎来动态 ...

  8. mybatis配eclise模板,mybatis快速生成模板

    eclipse中mybatis得mapper文件不提示(mybatis-3-mapper.dtd,mybatis-3-config.dtd) 1.下载该文件到你的硬盘文件夹下 2.windows -- ...

  9. 写一个迷你版Smarty模板引擎,对认识模板引擎原理非常好(附代码)

    前些时间在看创智博客韩顺平的Smarty模板引擎教程,再结合自己跟李炎恢第二季开发中CMS系统写的tpl模板引擎.今天就写一个迷你版的Smarty引擎,虽然说我并没有深入分析过Smarty的源码,但是 ...

随机推荐

  1. CodeForces - 321E:Ciel and Gondolas (四边形不等式优化DP)

    题意:N个人排成一行,分成K组,要求每组的不和谐值之和最小. 思路:开始以为是斜率优化DP,但是每个区间的值其实已经知道了,即是没有和下标有关的未知数了,所以没必要用斜率. 四边形优化. dp[i][ ...

  2. BZOJ3594: [Scoi2014]方伯伯的玉米田【二维树状数组优化DP】

    Description 方伯伯在自己的农田边散步,他突然发现田里的一排玉米非常的不美. 这排玉米一共有N株,它们的高度参差不齐. 方伯伯认为单调不下降序列很美,所以他决定先把一些玉米拔高,再把破坏美感 ...

  3. c语言标识符

    在程序中使用的变量名.函数名.标号等统称为标识符. 除库函数的函数名由系统定义外,其余都由用户自定义. C 规定,标识符只能是字母(A-Z,a-z).数字(0-9).下划线()组成的字符串,并且其第一 ...

  4. ssh连接至Ubuntu服务器时,提示以下错误:REMOTE HOST IDENTIFICATION HAS CHANGED!

    今天在使用Ubuntu搭建自己的git仓库的时候,搭建完成后clone时出现以下错误 经过搜索问题出现原因的描述如下:第一次使用SSH连接时,会生成一个认证,储存在客户端的known_hosts中. ...

  5. Mac 中的sublime text3 如何安装插件

    Mac中sublime text安装插件的步骤: 在sublime text中顶部标签栏中View–>Show Console,或者按快捷键control+`打开. 在下面输入框中粘贴进以下代码 ...

  6. pandas 的Series 里经常会出现DatetimeIndex这个类

    DatetimeIndex 的操作还是值得研究一下的. 参考其用法, http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Date ...

  7. drone 学习五 集成gitlab 配置以及简单测试

    备注: 使用docker-compose  进行安装 同时集成gitlab,预备环境 docker  docker-compose  gitlab 1. docker-compose version: ...

  8. requirejs 到底有什么好处?

    无论是在backbone时代,还是angularjs 时代 我都用过requirejs, 后来慢慢全都去掉了, 因为在前端开发requirejs 感觉没有带来任何实质性的好处. 从几个方面说说我的感受 ...

  9. javascript基础-js函数

    一.创建函数的方式 1)普通方式 function cal( num1, num2 ) { return num1+num2; } 2)使用变量初始化方式 var plus = function(nu ...

  10. struts2学习(15)struts2防重复提交

    一.重复提交的例子: 模拟一种情况,存在延时啊,系统比较繁忙啊啥的. 模拟延迟5s钟,用户点了一次提交,又点了一次提交,例子中模拟这种情况: 这样会造成重复提交:   com.cy.action.St ...