习惯每次做完一个项目把项目所得进行分享:
velocity作为模板语言已经存在很久,近期接触下来感觉用的还行,
一: 先介绍下velocity-tools的好用之处,接下来再介绍如何整合。
整合了velocity-tools就不需要再导入什么标签了,这个velocity-tool中的工具有很多可以用于处理页面数据的东西。如格式化金额:$number.format("#0.00",$!{statistics.monthAmountStatistics}) 。格式化日期:$!date.format('yyyy-MM-dd',$!user.createdDate)。这里就简单说说用的到两个,其中还有以下工具:
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:工具使用超链接格式;这个工具有点不寻常的在每一个方法,参数将返回一个新实例的工具的一个副本的方法之一是呼吁,有额外的改变指定的方法调用
10:MathTool:工具提供数学函数
11:NumberTool:工具用于格式化数字
12:RenderTool:工具,使方法来评估给定的字符串作为VTL(Velocity模板语言)使用一个预先配置的上下文或您直接提供
13:ResourceTool:工具访问resourcebundle的和格式化消息,大多数方法都返回一个新对象,大多与原始相同的方法,允许您建立参数优雅和简单,而不是试图记住如何使用方法与许多参数,必须在一个特定的顺序:所以,你可以访问资源的关键“你好。谁”“otherStuff”包与一个消息这样的论点:美元text.hello.whoever.bundle(otherStuff).insert(世界)而不是这样的:text.get美元(“你好。谁”、“otherStuff“零美元,”世界”)
14:SortTool:排序工具集合
15:XmlTool:工具用于阅读/导航XML文件;这在幕后使用dom4j提供完整的XPath支持遍历XML文件
16:BrowserTool:浏览器嗅探工具,它定义了属性用于测试客户端浏览器、操作系统、设备、语言…除了浏览器版本的相关属性和语言,所有属性都是布尔值。
17:CookieTool:工具用于读取和设置cookie
18:ImportTool:通用text-importing视图的工具模板
19:IncludeTool:工具允许透明的内容协商的方式模仿Apache httpd MultiViews方法;读取默认语言的ViewToolContext org.apache.velocity.tools.view.i18n。defaultLanguage;请注意,它并不实际的# include或#为你解析,但仅仅是帮助包括内容协商
20:LinkTool:工具使用超链接格式;这个工具有点不寻常的在每一个方法,参数将返回一个新实例的工具的一个副本的方法之一是呼吁,有额外的改变指定的方法调用,允许链接调用像href = " $ link.relative(foobar.html).param .anchor(“id”、“25”)(“第四单元”)”(这将产生href = " foobar.html ? id = 25 #第四单元”)
21:PagerTool:工具做request-based分页列表中的项目
22:ParameterTool:工具用来解析请求参数
23:ViewContextTool:扩展的通用ContextTool包括从HttpServletRequest键和值,HttpSession和ServletContext属性
//上来内容来源对下面链接的翻译,有的地方翻译可能不正确, 想用什么工具的就看自己项目的需求,然后自己看着办。
https://velocity.apache.org/tools/releases/2.0/summary.html#ContextTool
toolbox.xml:
二:如何使springboot和velocity-tools进行整合,以及需要配置点什么东西。
配置属性如下:请特别注意下配置的velocity-tools的工具的路径
配置好了这些,接下来需要要让springboot加载velocity-tooles
添加以下两个类:
类1:
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;
/**
*
* @ClassName: VelocityConfig
* @Description:提供一个velocity的配置bean
* @author lilerong
* @date 2016年1月23日 下午1:32:32
*
*/
@Configuration
public class VelocityConfig {
@Bean
// 现在这个class不再是layout的,所以要把对应的 ViewResolver改成对应的,由于没有
// toolboxviewresolver,就用父类 veclotiyviewresoler
public VelocityViewResolver velocityViewResolver(VelocityProperties properties) {
VelocityViewResolver viewResolver = new VelocityViewResolver();
viewResolver.setViewClass(VelocityLayoutToolboxView.class);
properties.applyToViewResolver(viewResolver);// 设置默认属性,比如前缀和后缀
return viewResolver;
}
}
类2:
/**
*
* @ClassName: VelocityLayoutToolboxView
* @Description: 使springboot支持velocityTool工具的使用。
* @author lilerong
* @date 2016年1月23日 上午11:00:08
*
*/
public class VelocityLayoutToolboxView extends VelocityToolboxView
{
private VelocityLayoutToolboxView() {
}
/**
* 加载velocitytool。能加载上特别的不容易
*/
@Override
protected Context createVelocityContext(Map
ViewToolContext ctx = new ViewToolContext(this.getVelocityEngine(), request, response, this.getServletContext());
if (this.getToolboxConfigLocation() != null) {
XmlFactoryConfiguration factory = new XmlFactoryConfiguration();
factory.read(ResourceUtils.getURL(this.getToolboxConfigLocation()).openStream());// 这个地方和配置中心的缺一不可、
ToolboxFactory toolboxFactory = factory.createFactory();
toolboxFactory.configure(factory);
Collection
for (ToolboxConfiguration tc : toolboxes) {
ctx.addToolbox(toolboxFactory.createToolbox(tc.getScope()));// 这样操作后就可以用工具里面的东西了。
}
}
if (model != null && !model.isEmpty()) {
ctx.putAll(model);
}
return ctx;
}
三:大家肯定会好奇问,为什么没看到我把springboot和velocitylayout进行整合,其实我想说,一开始我是整合了的,但是整合后发现一个问题,那就是他跳转是刷新整个页面,如果你项目是上,左,中的布局,你只想刷新中间的布局,那么velocitylayout是无法实现的。所以我整合好后还是弃用了,但是如果不介意用这种刷新所有的方式,那请继续往下看。
把上面的 extends VelocityToolboxView 改为 extends VelocityToolboxView。然后VelocityConfig.java中的返回值同样作下修改。那么这个就是velocitylayout的加载方式。
二和三我说的都是springboot加载的后台处理,下面说下前台我们该怎么做。
四:在resources/templates目录下建一个layout的文件夹,然后新增以下文件,
layout.vm 这个我只提取了body的,其实这个相当于index页面,需要,html,head,body,已经全局的样式什么的都要在这个地方进行加载。
left.vm:
其他两个vm没什么好介绍的,都的给定一些写死的值。主要是layout页面和left页面比较重要。
上面已经全部介绍完毕,如果有不懂的可以给我留言