velocity模板引擎-vm语法整理
模板引擎我目前接触过两次,
第一次是在前后端还未分离时,考虑到部分页面数据比较固定,一定时间内不会变动,这样每次从后台加载数据渲染页面明显会消耗性能以及资源浪费,所以使用模板引擎主动生成静态页面,当时使用的是FreeMarker实现的。
第二次是在邮件发送时,想要直接展示制表符等等,使用velocity引擎,vm模板实现。
velocity模板引擎-vm语法整理
一、Velocity 模板引擎介绍
二、入门HelloWord
三、模板基本语法
(一)变量
(二)判断 if
(三)循环 foreach
(四)逻辑运算符 与或非
(五)宏 函数
(六)文件引用
四、常用工具整理
五、velocity模板引擎应用
一、Velocity 模板引擎介绍
在如今流行的 MVC 架构模式中,软件各个层次的功能更加独立,同时代码的相似度也更加高。为减少软件开发人员的重复劳动,将更多的精力放在业务逻辑以及其他更加具有创造力的工作上。模板引擎在一定程度上解决这个问题。
Velocity 是一个基于 Java 的模板引擎框架,提供的模板语言可以使用在 Java 中定义的对象和变量上。Velocity 是 Apache 基金会的项目,开发的目标是分离 MVC 模式中的持久化层和业务层。但是在实际应用过程中,Velocity 不仅仅被用在了 MVC 的架构中,还可以被用在以下一些场景中。
-
Web 应用:开发者在不使用 JSP 的情况下,可以用 Velocity 让 HTML 具有动态内容的特性。
-
源代码生成:Velocity 可以被用来生成 Java 代码、SQL 或者 PostScript。有很多开源和商业开发的软件是使用 Velocity 来开发的。
-
自动 Email:很多软件的用户注册、密码提醒或者报表都是使用 Velocity 来自动生成的。使用 Velocity 可以在文本文件里面生成邮件内容,而不是在 Java 代码中拼接字符串。
-
转换 xml:Velocity 提供一个叫 Anakia 的 ant 任务,可以读取 XML 文件并让它能够被 Velocity 模板读取。一个比较普遍的应用是将 xdoc 文档转换成带样式的 HTML 文件。
二、入门HelloWord
pom引入,目前有2.0新版本
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>velocity-tools</groupId>
<artifactId>velocity-tools</artifactId>
<version>1.4</version>
</dependency>
java代码
package com.cnzz.mytest.velocity;
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 org.apache.velocity.tools.generic.DateTool;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
* ************************************************************
* ************************************************************
* @program: demo
* @description: hellowold
* @author: cnzz
* @create: 2020-11-19 18:48
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("template/hellovelocity.vm");
// 设置变量
VelocityContext ctx = new VelocityContext();
ctx.put("name", "Velocity");
//时间工具
ctx.put("date", new DateTool());
//遍历list
List list = new ArrayList();
list.add("1");
list.add("2");
ctx.put("list", list);
// 输出
StringWriter sw = new StringWriter();
t.merge(ctx,sw);
System.out.println(sw.toString());
vm模板文件
##单行注释
## 变量用法打招呼
#set($greet = 'Hello')
#set($greetStr = "I say $greet $name")
$greetStr
#foreach($i in $list)
today is $date
vm文件放在resource下就可以
三、模板基本语法
Velocity 中所有的关键字都是以 # 开头的,而所有的变量则是以$开头。Velocity 的语法类似于 JSP 中的 JSTL,甚至可以定义类似于函数的宏。
(一)变量
1、变量的定义
#set关键字定义赋值变量
##1.变量的定义
#set($names ="velocity")
#set($hello ="hello $names")
2、变量的赋值
#set关键字定义赋值变量
##-变量是弱数据类型的,可以在赋了一个 String 给变量之后再赋一个数字或者数组给它。
##-六种数据类型赋给Velocity变量:变量引用, 字面字符串, 属性引用, 方法引用, 字面数字, 数组列表。 boolean 类型也可以。
##2. 变量的赋值
##-变量是弱数据类型的,可以在赋了一个 String 给变量之后再赋一个数字或者数组给它。
##-六种数据类型赋给Velocity变量:变量引用, 字面字符串, 属性引用, 方法引用, 字面数字, 数组列表。
#set($test = 1)
#set($test ="cnzz")
#set($array = ["array",1,$test])
#set($obj={"name":"Cnzz","age":18})
#set($obj.name=$test)
3、 变量的使用
##-使用$name 或者 ${name} 来使用定义的变量
##-${person.name} 和 ${person.getName()}访问person的name属性
## $!name与 ${!name}表示值为空时强制空白
##3. 变量的使用
##-使用$name 或者 ${name} 来使用定义的变量
##-${person.name} 和 ${person.getName()}访问person的name属性
## $!name与 ${!name}表示值为空时强制空白
$test
${array}
${obj}
$obj.name
(二)判断 if
条件语句语法
#if(condition)
...
#elseif(condition)
...
#else
...
#end
##二、判断 if
#set($flag = "a")
#if($flag==1)
flag=1
#elseif($flag=="a")
flag=a
#else
flag=null
(三)循环 foreach
## velocityCount是Velocity提供的用来记录当前循环次数的计数器,默认从1开始计数,可以在velocity.properties文件中修改其初始值
## 三、循环
## velocityCount是Velocity提供的用来记录当前循环次数的计数器,默认从1开始计数,可以在velocity.properties文件中修改其初始值
#foreach($item in $list)
This is $item
$velocityCount
(四)逻辑运算符 与或非
##Velocity 引擎提供了 与、或 和 非 操作符,分别对应 &&、|| 和 !
##四、逻辑关系操作符
##Velocity 引擎提供了 与、或 和 非 操作符,分别对应 &&、|| 和 !
#set($var=true)
#set($var1=false)
## 与逻辑
#if($var && $var1)
$var and $var1 = true
#else
$var and $var1 = false
## 或逻辑
#if($var || $var1)
$var or $var1 = true
#else
$var or $var1 = false
## 非逻辑
#if(!$var)
$var not = true
#else
$var not = false
(五)宏 函数
Velocity 中的宏可以理解为函数定义。关键字 #macro
#macro(macroName arg1 arg2...)
...
#end
#macroName(arg1 arg2...)
##五、宏/函数
## 关键字 #macro
##定义宏
#macro(sayHello $username)
hello $username
##使用宏
#sayHello("cnzz")
(六)文件引用
#parse 和 #include 用来引用外部文件
## #parse 会将引用的内容当成类似于源码文件,会将内容在引入的地方进行解析,
## #include 是将引入文件当成资源文件,会将引入内容原封不动地以文本输出。
## 六、#parse 和 #include 外部文件引入
## #parse 会将引用的内容当成类似于源码文件,会将内容在引入的地方进行解析,
## #include 是将引入文件当成资源文件,会将引入内容原封不动地以文本输出。
## foo.vm 内容 #set($name ="velocity")
#parse("foo.vm") ##输出 velocity
#include("foo.vm") ##输出 #set($name =”velocity”)
四、常用工具整理
五、velocity模板引擎应用
velocity的应用还是入门,后面需要深入学习应用
https://developer.ibm.com/zh/articles/j-lo-velocity1/
最近,脚手架和代码生成器比较火。mybatis-plus,mybatis-generator,gun,码云上也有很多项目有这个功能.
最近我根据公司的编程习惯以及微服务框架,为我们公司定制化了一个代码生成器,采用的是velocity模板引擎(当然模板引擎有多种,如freemarker等,可以按需选择哈)。
下面总结一下velocity的常用语法:
比如有一个JSONObject...
velocity与freemaker、jstl并称为java web开发三大标签技术,而且velocity在codeplex上还有.net的移植版本NVelocity,(注:castle团队在github上也维护了一个版本)对于使用异构技术的团队(即要搞.NET又要搞JAVA),总是希望找一种通用的技术,兼容所有技术平台,以便降低学习成本,无疑velocity是一种值得考虑的选择。
一、与str...
Velocity模板技术语法详细介绍,包括很详细的示例代码
1.变量………………………………………………………………………………1
2.循环………………………………………………………………………………2
3.条件语句…………………………………………………………………………2
4.语句的嵌套………………………………………………………………………2
5.注释………………………………………………………………………………2
6.关系和逻辑运算符………………………………………………………………3
7.宏…………………………………………………………………………………3
8. #stop……………………………………………………………………………4
9. #include与#parse……………………………………………………………4
10.转义字符的使用 ………………………………………………………………4
11.内置对象 ………………………………………………………………………5
12.数组的访问 ……………………………………………………………………5
[转载] 原地址 https://www.cnblogs.com/xiohao/p/5788932.html
格式整理了一下,后面再归整归整
Velocity是一个基于java的模板引擎(template engine),它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。作为一个比较完善的模板引擎,Velocity的功能是比较强大的,但强大的同时也增加了应用复杂性。
一、基本语法
1、"#"用来标识Velocity的脚本语句,
包括#set、#if 、#
velocity-tools-generic是Apache Velocity框架中的一个工具包。它是用来扩展Velocity模板引擎的功能的。引用中提到了一些与velocity-tools-generic相关的jar包,如velocity-tools-generic-3.1.jar、velocity-tools-generic-3.1-javadoc.jar和velocity-tools-generic-3.1-sources.jar等。这些jar包包含了该工具包的源代码、文档和依赖信息。
引用中给出了使用velocity-tools-generic的Maven依赖信息的示例。在搭建环境时,需要导入org.apache.velocity.tools的velocity-tools-generic工具包依赖。
引用中给出的示例展示了如何在Velocity模板中使用velocity-tools-generic工具包。通过配置toolbox,可以引入各种工具类,如DateTool、NumberTool、MathTool、DisplayTool、EscapeTool、FieldTool、ContextTool和RenderTool等。这些工具类可以帮助我们在Velocity模板中执行字符串表达式、格式化日期、处理数字、进行数学计算等。
总结来说,velocity-tools-generic是Apache Velocity框架中的一个工具包,可以扩展Velocity模板引擎的功能。通过引入相关的jar包和配置toolbox,我们可以在Velocity模板中使用这些工具类来处理数据和执行表达式。