Velocity在JavaWeb中的简单应用
它是一种视图层的引擎,支持通过自定义的VM模板来生成html文件,且vm模板中有一套自洽的语法,能够省略在后端代码中进行编写。
https://jingyan.baidu.com/article/3065b3b695df9dbecff8a434.html
作用
帮助程序员省略类中的代码,通过引入模板和在模板上进行一定程度上的编程来实现对模板的排版,通过KV键值对的形式给相应的对象进行赋值。
导入依赖
要使用首先当然是先导入依赖
<!--velocity模板导出HTML -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-tools</artifactId>
<version>2.0</version>
</dependency>
同时在应用中如果有需要还可以导入这个依赖
<!--Markdown格式文本转换为HTML格式 -->
<dependency>
<groupId>org.pegdown</groupId>
<artifactId>pegdown</artifactId>
<version>1.6.0</version>
</dependency>
语法
变量声明与KV键值对
${name}
$name
声明变量
与java中VelocityContext context = new VelocityContext()相对应
通过context.put(“name”, data);
这种key—value键值对的形式一一对应
循环结构
#foreach(${name} in ${names})
内容;
#end
这个for循环类似于java中的for(int list : list )对数组的遍历,如果我们在java中传入的names是一个集合,这样我们便可以通过for循环对其遍历。并且如果集合内是一个实体类,我们也可以通过${name.xinshi}的方法来得到对应的实体类中属性的数据,同理若实体类内也是一个集合,我们也可通过同样的方式对其进行套娃遍历。
IF,ELSE
#if(条件)
操作内容
#elseif(内容)
操作内容
#else
操作内容
#end
注意的是elseif要写在一起同时结束需要加end
宏
Velocity和C一样也支持定义宏
声明与定义宏
#macro(attack $name)
使用 $name
#end
使用宏
#attack("劈砍")
include And Parse
#parse("Number1.vm")
此方式也会解析VM模板的语法输出相应的结果
#include("Number2.vm")
此方式单纯的插入对应VM模板的内容
应用
在项目中,我使用了VM模板导出数据库中的数据为html,他方便的是很方便就能转化为html格式封装好了,不需要转为xml之后进行一系列操作,直接替换字符串。
我们通过在html前设置好各个类的格式然后只需要通过foreach对单个重复的模块不断循环就可以循环生成对应格式的模块,十分方便。