Velocity模板引擎和模板语法基础

1.Velocity简介

Velocity是一个基于Java的模板引擎,可以通过特定的语法获取在java对象的数据 , 填充到模板中,从而实现界面和java代码的分离 !

2.Velocity使用

2.1添加依赖

在使用Velocity之前,我们要在pom.xml文件引入依赖

<!-- velocity代码生成使用模板 --><dependency>
                <groupId>org.apache.velocity</groupId>
                <artifactId>velocity-engine-core</artifactId>
                <version>${velocity.version}</version>
            </dependency>

2.2在java代码中使用Velocity

使用步骤:

​ 1.设置velocity资源加载器

​ 2.创建velocity容器

​ 3.加载模板

​ 4.合并数据到模板

​ 5.释放资源

/**
 * @author Becant
 * 2024-04-11-23:07
 * @version 1.0.0
 * velocity测试
 */
public class VelocityTest {
    public static void main(String[] args) throws IOException {
        //1.设置velocity资源加载器
        Properties p = new Properties();
        p.put("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
        Velocity.init(p);
        //2.创建velocity容器
        VelocityContext context = new VelocityContext();
        context.put("name", "张三");
        SysUser user = new SysUser();
        user.setUserName("李四");
        context.put("user", user);
        context.put("names", "张三、李四");
        //3.加载模板
        Template template = Velocity.getTemplate("vm/index.vm", "UTF-8");
        FileWriter writer = new FileWriter("E:\\javaproject\\ruoyi-vue-plus-4x\\ruoyi-demo\\src\\main\\resources\\vm\\index.html");
        //4.合并数据到模板
        template.merge(context, writer);
        //5.释放资源
        writer.close();
    }
}

个人理解:template.merge(context, writer);上下文内容合并到模板然后解析到writer

需要注意的是要在resources中创建如下文件

context.put(“name”, “张三”); 这段代码表示在上下文中设置了name变量,值为张三。这样就可以从index.vm中获得name变量的值。

运行VelocityTest后,就生成了index.html文件。index.html文件是index.vm文件的解析。

接着,就开始解析index.vm文件的内容

解析之后,在index.html中显示

$name 就代表获取变量name,还可以这样表示${name}。两者的区别是:当需要拼接某个字符串(如 abc)时,$name就变成了$nameabc会形成一个新的变量;而${name}则变成${name}abc.

从上图我们可以知道,如果一个变量不存在,则不会被解析。那么当解析时,如何让一个不存在的变量不显示的呢,只需在前边加上!

2.3Velocity基础语法的使用

注释

注释有三种使用方法:

非解析内容

如果我们想使用$name这个字符串而不进行解析,可以这样实现:#[[$name]]#

属性引用以及方法引用

user.userName即是从上下文中设置的user的一个属性值。names.split(“、”),分割,与java中的split()方法类似,names也是从上下文中设置的。

在index.vm中定义变量

逻辑判断

循环

#foreach($a in $arr)与java中 for(ArrayList a : arr)类似

使用$foreach.index,索引值从0开始,使用$foreach.count,索引值从1开始

引入资源

A引入B:即把B的所有内容代码放到A执行

1.通过#include()引入模板

通过#include()引入模板不会进行解析。例如在vm/index.vm中引入vm/index2.vm,即#include(“vm/index2.vm”),但不能对vm/index2.vm解析。

2.通过#parse()引入模板

通过#parse()引入模板则会进行解析。

声明模块

声明模块有点类似java中的方法,但是模块内声明的变量,在模块外也可以使用。

动态计算指令

定义宏指令

如果本文出现错误或有歧义,劳烦大家指出,谢谢!

本文到此结束!


Velocity模板引擎和模板语法基础
http://example.com/2024/04/11/Velocity模板引擎和模板语法基础/
发布于
2024年4月11日
更新于
2024年4月21日
许可协议