添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

velocity模板引擎-vm语法整理

模板引擎我目前接触过两次,

第一次是在前后端还未分离时,考虑到部分页面数据比较固定,一定时间内不会变动,这样每次从后台加载数据渲染页面明显会消耗性能以及资源浪费,所以使用模板引擎主动生成静态页面,当时使用的是FreeMarker实现的。

第二次是在邮件发送时,想要直接展示制表符等等,使用velocity引擎,vm模板实现。

velocity模板引擎-vm语法整理

一、Velocity 模板引擎介绍

二、入门HelloWord

三、模板基本语法

(一)变量

(二)判断 if

(三)循环 foreach

(四)逻辑运算符 与或非

(五)宏 函数

(六)文件引用

四、常用工具整理

五、velocity模板引擎应用

一、Velocity 模板引擎介绍

在如今流行的 MVC 架构模式中,软件各个层次的功能更加独立,同时代码的相似度也更加高。为减少软件开发人员的重复劳动,将更多的精力放在业务逻辑以及其他更加具有创造力的工作上。模板引擎在一定程度上解决这个问题。

Velocity 是一个基于 Java 的模板引擎框架,提供的模板语言可以使用在 Java 中定义的对象和变量上。Velocity 是 Apache 基金会的项目,开发的目标是分离 MVC 模式中的持久化层和业务层。但是在实际应用过程中,Velocity 不仅仅被用在了 MVC 的架构中,还可以被用在以下一些场景中。

  1. Web 应用:开发者在不使用 JSP 的情况下,可以用 Velocity 让 HTML 具有动态内容的特性。

  2. 源代码生成:Velocity 可以被用来生成 Java 代码、SQL 或者 PostScript。有很多开源和商业开发的软件是使用 Velocity 来开发的。

  3. 自动 Email:很多软件的用户注册、密码提醒或者报表都是使用 Velocity 来自动生成的。使用 Velocity 可以在文本文件里面生成邮件内容,而不是在 Java 代码中拼接字符串。

  4. 转换 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模板中使用这些工具类来处理数据和执行表达式。