velocity模板引擎本身提供了基本的语法层面的解析,在实际的使用中还有很多可以扩展的工具来简化开发中遇到的一些问题,比如数据的格式化、页面相关的路径处理等。
开发环境
- spring
- spring boot
- velocity
- spring boot mvc
- mybatis
使用指南
创建toolbox.xml: (放在WEB_INF目录下)
<?xml version="1.0" encoding="UTF-8"?>
<tools>
<data type="string" key="version" value="2.0"/>
<!-- 在这里配置 类,在项目启动的时候就自动把类实例化好了,在页面就可以用了,例子:下面 ${test.Method()}-->
<toolbox scope="request">
<!-- currentProject util start -->
<!-- <tool key="test" class="com.gzrj.services.Test"></tool> -->
<!-- currentProject util end -->
<!-- 下面的这些配置都是velocity的配置,可以不用管,也不能更改 -->
<!-- velocity util start -->
<tool class="org.apache.velocity.tools.view.CookieTool"/>
<tool class="org.apache.velocity.tools.view.ImportTool"/>
<tool class="org.apache.velocity.tools.view.IncludeTool"/>
<tool class="org.apache.velocity.tools.view.LinkTool"/>
<tool class="org.apache.velocity.tools.view.PagerTool"/>
<tool class="org.apache.velocity.tools.view.ParameterTool"/>
<tool class="org.apache.velocity.tools.view.ViewContextTool"/>
<tool class="org.apache.velocity.tools.generic.ContextTool"/>
<tool class="org.apache.velocity.tools.generic.LoopTool"/>
<tool class="org.apache.velocity.tools.generic.RenderTool"/>
<!-- velocity util end -->
</toolbox>
<toolbox scope="session" createSession="false">
<tool class="org.apache.velocity.tools.view.BrowserTool"/>
</toolbox>
<toolbox scope="application">
<tool class="org.apache.velocity.tools.generic.AlternatorTool"/>
<tool class="org.apache.velocity.tools.generic.ClassTool"/>
<tool class="org.apache.velocity.tools.generic.ComparisonDateTool"/>
<tool class="org.apache.velocity.tools.generic.ConversionTool"/>
<tool class="org.apache.velocity.tools.generic.DisplayTool"/>
<tool class="org.apache.velocity.tools.generic.EscapeTool"/>
<tool class="org.apache.velocity.tools.generic.FieldTool"/>
<tool class="org.apache.velocity.tools.generic.MathTool"/>
<tool class="org.apache.velocity.tools.generic.NumberTool"/>
<tool class="org.apache.velocity.tools.generic.ResourceTool"/>
<tool class="org.apache.velocity.tools.generic.SortTool"/>
<tool class="org.apache.velocity.tools.generic.XmlTool"/>
<tool class="org.apache.velocity.tools.generic.ListTool"/>
<tool class="org.apache.velocity.tools.generic.DateTool"/>
</toolbox>
</tools>
Spring中配置Velocity Tools
- 添加配置
基本的使用中将配置好的属性放到/WEB-INF目录下,并在application.properties中添加对应的配置:spring.velocity.toolbox-config-location=WEB-INF/toolbox.xml - 列表内容
- 添加配置类
import org.springframework.boot.autoconfigure.velocity.VelocityProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.view.velocity.VelocityViewResolver;
@Configuration
public class VelocityConfig {
@Bean(name = "velocityViewResolver")
public VelocityViewResolver velocityViewResolver(VelocityProperties properties) {
VelocityViewResolver viewResolver = new VelocityViewResolver();
viewResolver.setViewClass(VelocityLayoutToolboxView.class);
properties.applyToViewResolver(viewResolver);// 设置默认属性,比如前缀和后缀
return viewResolver;
}
}
类2:
public class VelocityLayoutToolboxView extends VelocityToolboxView {
private VelocityLayoutToolboxView() {
}
@Override
protected Context createVelocityContext(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
ViewToolContext ctx = new ViewToolContext(this.getVelocityEngine(), request, response, this.getServletContext());
if (this.getToolboxConfigLocation() != null) {
XmlFactoryConfiguration factory = new XmlFactoryConfiguration();
factory. read(ResourceUtils.getURL(getToolboxConfigLocation()).openStream());
ToolboxFactory toolboxFactory = factory.createFactory();
toolboxFactory.configure(factory);
Collection<ToolboxConfiguration> toolboxes = factory.getToolboxes();
for (ToolboxConfiguration tc : toolboxes) {
ctx.addToolbox(toolboxFactory.createToolbox(tc.getScope()));// 这样操作后就可以用工具里面的东西了。
}
}
if (model != null && !model.isEmpty()) {
ctx.putAll(model);
}
return ctx;
}
}
配置完成后,页面就可以使用工具类了。
常用工具类说明
https://velocity.apache.org/tools/devel/
https://github.com/apache/velocity-tools
https://velocity.apache.org/tools/releases/2.0/summary.html
1.AlternatorTool:通过一个数组变量周期
配置属性:autlAlternate (),boolean 类型,默认是true
方法和属性:
A:#set( $alt = $alternator.auto(value1,value2,...) );创建一个自动的交替符
B:#set( $alt = $alternator.make(value1,value2,...) );创建一个默认的交替符
C:#set( $alt = $alternator.manual(value1,value2,...) );创建一个手动的交替符
2、ClassTool:工具,它的目的是要在模板中使用Java反射
3、ComparisonDateTool:工具格式,解析和比较日期
4、ContextTool:取当前页面的值
5、ConversionTool 允许数据之间的类型转换
6、displaytool工具提供了各种各样的方法来控制输出显示各种引用你的模板
7、escapetool工具提供一些逃离设施
8、FieldTool:工具允许方便地访问公共静态字段类,如字符串常量
9、LinkTool
工具使用超链接格式;这个工具有点不寻常的在每一个方法,参数将返回一个新实例的工具的一个副本的方法之一是呼吁,有额外的改变指定的方法调用。
官方参考文档:
http://velocity.apache.org/tools/devel/view/LinkTool.html
10、MathTool:工具提供数学函数
11、NumberTool:工具用于格式化数字
12、RenderTool:工具,使方法来评估给定的字符串作为VTL(Velocity模板语言)使用一个预先配置的上下文或您直接提供
13、ResourceTool:
工具访问resourcebundle的和格式化消息,大多数方法都返回一个新对象,大多与原始相同的方法,允许您建立参数优雅和简单,而不是试图记住如何使用方法与许多参数,必须在一个特定的顺序:所以,你可以访问资源的关键“你好。谁”“otherStuff”包与一个消息这样的论点:美元text.hello.whoever.bundle(otherStuff).insert(世界)而不是这样的:text.get美元(“你好。谁”、“otherStuff“零美元,”世界”)