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中的方法,但是模块内声明的变量,在模块外也可以使用。
动态计算指令
定义宏指令
如果本文出现错误或有歧义,劳烦大家指出,谢谢!
本文到此结束!