目录
背景
我们已经知道了velocity的基础知识,现在有一个工具包,VelocityTools
GenericTools 使用
什么叫做GenericTools
总之就是工具类,我们学习这个,就是学习这个工具类的api
搭建环境
<!-- velocity 的核心包-->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.2</version>
</dependency>
<!-- velocity 的工具包 要使用人家工具包里面的api,就需要导入工具包-->
<dependency>
<groupId>org.apache.velocity.tools</groupId>
<artifactId>velocity-tools-generic</artifactId>
<version>3.0</version>
</dependency>
快速入门
项目中已经导入了依赖,我们自己创建一个模板,在这个模板里面就可以使用工具类了。
我们查看工具类的文档,现在我们要在模板里面定义事件,那么在工具类的api里面找到相关事件的类。
这个文档里面有很多的类,每一个类里面有很多的方法,我们就是使用这个类里面的方法
比如这个时间,就是一个类,这个类里面有很多的方法
这个类里面的一些方法是
使用步骤:
写一个vm,里面使用工具类
写一个配置的xml
写测试方法
public class ToolsTest {
public static void main(String[] args) throws IOException {
// 1 创建引擎对象
VelocityEngine engine = new VelocityEngine();
// 2 设置模板的加载路径
engine.setProperty(Velocity.RESOURCE_LOADER,"class");
engine.setProperty("class.resource.loader.class","org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
// 3 初始化引擎
engine.init();
// 4 加载tools.xml配置文件
ToolManager toolManager = new ToolManager();
toolManager.configure("tools.xml");
// 5 加载模板
Template template = engine.getTemplate("vm/tools.vm");
// 6 设置数据
ToolContext context = toolManager.createContext();
context.put("now",new Date());
// 7 合并数据到模板
FileWriter fileWriter = new FileWriter("E:\\java_springboot_code\\springboot_first\\01_springboot_mybatis\\src\\main\\resources\\vm\\tools.html");
template.merge(context,fileWriter);
// 8 释放资源
fileWriter.close();
}
}
最后生成的html 是
工具类以及案例
DateTool
## $data 就是VelocityTool 的key,也就是工具类里面的类名
当前时间: $date.get('yyyy-M-d H:m:s')
年:$date.getYear()
月:$date.getMonth()
日:$date.getDay()
年:$date.getYear($now)
月:$date.getMonth($now)
日:$date.getDay($now)
当前时间: $date.getDate()
当前时间: $date.get('yyyy-M-d H:m:s')
格式化时间: $date.format($now)
$date.format("yyyy/MM/dd",$now)
最后生成的HTML是
NumberTool
<?xml version="1.0" encoding="UTF-8"?>
<tools>
<toolbox scope = "application">
<tool class="org.apache.velocity.tools.generic.DateTool" format = "yyyy-MM-dd"> </tool>
<tool class="org.apache.velocity.tools.generic.NumberTool" > </tool>
</toolbox>
</tools>
原始数据: $mynumber
## $number 工具类 里面有很多的方法
格式化: $number.format($mynumber)
取整: $number.integer($mynumber)
将字符串转为number $number.toNumber($mynumber1)
MathTool
在模板里面要对这两个数据进行运算
num1+num2 = $math.add($num1,$num2)
num1-num2 = $math.sub($num1,$num2)
num1*num2 = $math.mul($num1,$num2)
num1/num2 = $math.div($num1,$num2)
向上取整: $math.ceil($num3)
向下取整: $math.floor($num3)
DisplayTool
默认输出格式: $display.list($list)
自定义分隔符 $display.list($list,',')
字符串截取 默认30个长度 $display.truncate($str)
$display.truncate($str,10)
$display.truncate($str,10,"10")
## alt 方法用于判断给的数据是否为空,如果为空,展示默认值
不为空: $display.alt($num1,"hhhh")
EscapeTool
$esc.velocity($HTML)
$esc.html($HTML)
$esc.url($HTML)
<tool class="org.apache.velocity.tools.generic.EscapeTool" > </tool>
FieldTool
<tool class="org.apache.velocity.tools.generic.FieldTool"
include="com.pojo.User" > </tool>
我们还可以在context里面存对象,之后利用这个工具,获取到这个对象里面的静态变量
ClassTool
ContextTool
这个就是帮助我们拿到在context里面存的数据
<tools>
<toolbox scope = "application">
<tool class="org.apache.velocity.tools.generic.DateTool" format = "yyyy-MM-dd"> </tool>
<tool class="org.apache.velocity.tools.generic.NumberTool" > </tool>
<tool class="org.apache.velocity.tools.generic.MathTool" > </tool>
<tool class="org.apache.velocity.tools.generic.DisplayTool" > </tool>
<tool class="org.apache.velocity.tools.generic.EscapeTool" > </tool>
<tool class="org.apache.velocity.tools.generic.FieldTool" include="com.pojo.User" > </tool>
</toolbox>
ContextTool 对于这个工具,必须放到这个request里面才可以生效
<toolbox scope="request">
<tool class="org.apache.velocity.tools.generic.ContextTool" > </tool>
</toolbox>
</tools>
获取到context中所有的key: $context.keys
获取到context中所有的value:$context.values
获取到所有的key-value 值
#foreach($key in $context.keys)
$key ---- $context.get($key)
#end
RenderTool
这个工具的意思是,我们自己在这个页面定义的数据,如果表达式变为字符串了,就不能执行了,现在想要将字符串的表达式进行执行,那么就可以使用这个工具
<tools>
<toolbox scope = "application">
<tool class="org.apache.velocity.tools.generic.DateTool" format = "yyyy-MM-dd"> </tool>
<tool class="org.apache.velocity.tools.generic.NumberTool" > </tool>
<tool class="org.apache.velocity.tools.generic.MathTool" > </tool>
<tool class="org.apache.velocity.tools.generic.DisplayTool" > </tool>
<tool class="org.apache.velocity.tools.generic.EscapeTool" > </tool>
<tool class="org.apache.velocity.tools.generic.FieldTool" include="com.pojo.User" > </tool>
</toolbox>
<toolbox scope="request">
<tool class="org.apache.velocity.tools.generic.ContextTool" > </tool>
<tool class="org.apache.velocity.tools.generic.RenderTool" > </tool>
</toolbox>
</tools>
##定义一个list集合
#set($list=[1,2,2,3])
## 设置变量为一个字符串
#set($object = '$list')
#set($method = 'size()')
##获取集合的长度
$render.eval("$object.$method")
生成的为
SortTool
先往context里面存放list集合数据,里面的数据是杂乱无章的
<tool class="org.apache.velocity.tools.generic.SortTool" > </tool>
以上是有序的
以上对于对象是默认升序的,现在我们想要降序咋办
CollectionTool
除了有SortTool 的方法功能,还有
将字符串根据某个规则 生成为集合
#set($str="44,88,99")
$str.split(",")
XmlTool
创建一个xml