Velocity中的ComparisonDateTool、MathTool、NumberTool、SortTool、EscapeTool工具

可以从Apache官方网站自带的例子中查找,位置\velocity-tools-1.4-src\examples\showcase。

Apache官方网站自带的例子有下面一些:

使用Velocity Tools的时候,一定要在toolbox.xml中指定,然后在应用的web.xml中配置。

这里,关于jar包的引用,很可能出现一种Velocity运行时异常,例如:

信息: Velocity   [warn] org.apache.velocity.runtime.exception.ReferenceException: reference : template = /templates/context.vm [line 12,column 37] : $context is not a valid reference.
2008-4-23 9:41:45 org.apache.catalina.core.ApplicationContext log

息: Velocity   [warn]
org.apache.velocity.runtime.exception.ReferenceException: reference :
template = /templates/context.vm [line 16,column 37] : $context.keys is
not a valid reference.
2008-4-23 9:41:45 org.apache.catalina.core.ApplicationContext log

息: Velocity   [warn]
org.apache.velocity.runtime.exception.ReferenceException: reference :
template = /templates/context.vm [line 20,column 37] : $context.toolbox
is not a valid reference.
2008-4-23 9:41:45 org.apache.catalina.core.ApplicationContext log

息: Velocity   [warn]
org.apache.velocity.runtime.exception.ReferenceException: reference :
template = /templates/context.vm [line 24,column 37] : $context.values
is not a valid reference.

关键就是jar包的选择有问题,还可能是没有加入指定的工具的jar包。

选择几个工具:

org.apache.velocity.tools.generic.ComparisonDateTool

在toolbox.xml中配置如下所示:

<tool>
    <key>date</key>
    <scope>application</scope>
    <class>org.apache.velocity.tools.generic.ComparisonDateTool</class>
    <parameter name="format" value="yyyy-MM-dd"/>
    <parameter name="depth" value="2"/>
    <parameter name="skip" value="month"/>
</tool>

date就像一个内置对象,你随时可以在.vm的Velocity模板中使用。

关于date,如下所示:

函数举例 显示结果
$date 2008-04-22
$date.long 2008年4月22日 下午10时58分54秒
$date.medium_time 22:58:54
$date.full_date 2008年4月22日 星期二
$date.yyyy 2008
$date.get('default','short') 2008-4-22 下午10:58
$date.get('yyyy-M-d H:m:s') 2008-4-22 22:58:54
$date.whenIs('2008-04-20') 2 days 22 hours ago
$date.whenIs('2008-04-20').full 2 days 22 hours 58 minutes 54 seconds 484 milliseconds ago
$date.whenIs('2008-04-20').days -2
$date.whenIs('2008-04-20') 22 hours 58 minutes ago
$date.whenIs('2008-04-20','2008-04-20') same time
$date.difference('2008-04-20', '2008-04-20') 2 days
$date.whenIs('2008-04-20').days -2

org.apache.velocity.tools.generic.MathTool

在toolbox.xml中配置如下所示:

<tool>
    <key>math</key>
    <scope>application</scope>
    <class>org.apache.velocity.tools.generic.MathTool</class>
</tool>

关于math,如下所示:

函数举例 显示结果
$math.add("10","4") 14
$math.sub("100","20") 80
$math.mul("11","7") 77
$math.div("100","5") 20
$math.idiv("100","5") 20
$math.pow("2","5") 32
$math.mod("13","5") 3
$math.max("99","16") 99
$math.min("99","16") 16
$math.abs("-99") 99
\$math.cell("99.26") $math.cell("99.26")
$math.floor("99.26") 99
$math.random 0.7663665545444911
$math.random("1","10") 2
$math.roundTo("2","5") 5.0
$math.toInteger("15") 15
$math.toDouble("15") 15.0
$math.toNumber("15") 15

org.apache.velocity.tools.generic.NumberTool

在toolbox.xml中配置如下所示:

<tool>
    <key>number</key>
    <scope>application</scope>
    <class>org.apache.velocity.tools.generic.NumberTool</class>
    <parameter name="format" value="#0.0"/>
</tool>

关于number,如下所示:

函数举例 显示结果
$number org.apache.velocity.tools.generic.NumberTool@32c41c
$number.currency("35") ¥35.00
$number.format #0.0
$number.locale zh_CN
$number.format("35") 35.0
$number.integer("35.47") 35
$number.number("35.47") 35.47
$number.percent("0.3547") 35%
$number.toNumber("35.47") 35.47

org.apache.velocity.tools.generic.SortTool

在toolbox.xml中配置如下所示:

<tool>
    <key>sorter</key>
    <scope>application</scope>
    <class>org.apache.velocity.tools.generic.SortTool</class>
</tool>

关于sorter,如下所示:

函数举例 显示结果
$sorter.sort(['d','a','b','c']) [a, b, c, d]
$sorter.sort([5,1,12,3]) [1, 3, 5, 12]

sorter工具,可以对指定的集合进行排序,如List,Array,Map等等。

org.apache.velocity.tools.generic.EscapeTool

在toolbox.xml中配置如下所示:

<tool>
    <key>esc</key>
    <scope>application</scope>
    <class>org.apache.velocity.tools.generic.EscapeTool</class>
</tool>

关于esc,如下所示:

函数举例 显示结果
$esc org.apache.velocity.tools.generic.EscapeTool@e09a07
$esc.b \
$esc.backslash \
$esc.d $
$esc.dollar $
$esc.e !
$esc.exclamation !
$esc.h #
$esc.hash #
$esc.q "
$esc.quote "
\esc.s esc.s
$esc.singleQuote '
$esc.html("$esc.backslash") \
$esc.url("shirdrn.org/users/index.vm?id=1&name=异域王者") shirdrn.org%2Fusers%2Findex.vm%3Fid%3D1%26name%3D%E5%BC%82%E5%9F%9F%E7%8E%8B%E8%80%85
$esc.sql("SELECT * FROM PERSON WHERE ID='2008042319831'") SELECT * FROM PERSON WHERE ID=''2008042319831''
\$esc.java() [说明]Escapes the characters in a String using Java String rules.
\$esc.javascript() [说明]Escapes the characters in a String using JavaScript String rules.
\$esc.xml() [说明]Escapes the characters in a String using XML entities.
\$esc.propertyKey() [说明]Escapes the characters in a String using java.util.Properties rules for escaping keys.
\$esc.propertyValue() [说明]Escapes the characters in a String using java.util.Properties rules for escaping values.
 
来自

Velocity中的ComparisonDateTool、MathTool、NumberT...的更多相关文章

  1. 记录一次bug解决过程:velocity中获取url中的参数

    一.总结 在Webx的Velocity中获取url中参数:$rundata.getRequest().getParameter('userId') 在Webx项目中,防止CSRF攻击(Cross-si ...

  2. Velocity中避免null引起的数据问题

    请先看下面一段代码: #foreach($id in [1..50]) #set($user = $User.Get($id)) $id : ${user.name} #end 上面这段代码中,假设只 ...

  3. velocity中使用枚举

    版权声明:本文为博主原创文章,转载请注明出处,欢迎使劲喷 一.为什么要在velocity中使用枚举 1.目前接触到的系统,枚举通常用来在程序中定义数据字典. 举个支付的例子,比如一个字段用来标识一条记 ...

  4. 转 Velocity中加载vm文件的三种方式

    Velocity中加载vm文件的三种方式   velocitypropertiespath Velocity中加载vm文件的三种方式:    方式一:加载classpath目录下的vm文件 Prope ...

  5. Velocity中加载vm文件的三种方式

    Velocity中加载vm文件的三种方式: a.  加载classpath目录下的vm文件 /** * 初始化Velocity引擎 * --VelocityEngine是单例模式,线程安全 * @th ...

  6. Velocity中判断表达式是不是为空

    Velocity中判断表达式是不是为空 $if ($null.isNull($mycoll) || $mycoll.size()==0) ${}与$!{}区别 例子: ${str}:如果str没有值, ...

  7. velocity中$springMacroRequestContext.getMessage($code)

    在Java国际化(i18n)中, vm页面显示内容需要使用 #springMessage("title") 实际运行时发现页面输出$springMacroRequestContex ...

  8. Velocity中#set指令

    引用可以让模板设计者生成动态内容,而指令允许设计者真正的负责页面的展现和内容. 指令是以#开头,后面紧跟一个关键字,比如if,else,foreach等.而这个关键字,是可以被放在{}中间的.这是规范 ...

  9. velocity中加载模板文件的方式

    velocity有多中种方式供我们去加载我们自定义的模板文件,下面详细的介绍使用的方法. 1.1.1. 加载classpath目录下的模板文件 使用classpath方式加载,是我们经常用到的一种方式 ...

随机推荐

  1. mysql-noinstall.zip免安装版的优化配置和精简

    1.准备工作 下载mysql的最新免安装版本mysql-noinstall-5.5.25a-win32.zip,解压缩到相关目录,如:d:\\ mysql-noinstall-5.1.53-win32 ...

  2. MyEclipse 10、9、8 添加jadClipse反编译插件

    jad是一个使用比较广泛的Java反编译软件,jadClipse是jad在eclipse下的插件,如何将jadclipse加入到MyEclipse10.X,9.X,8.X当中: http://nchc ...

  3. js javascript 实现多线程

    在讲之前,大家都知道js是基于单线程的,而这个线程就是浏览器的js引擎. 首先来看一下大家用的浏览器都具有那些线程吧. 假如我们要执行一些耗时的操作,比如加载一张很大的图片,我们可能需要一个进度条来让 ...

  4. SD卡分区查看(u-boot下)

    可以在U-Boot的命令行中通过命令查看MMC的信息,如: U-Boot# mmc list OMAP SD/MMC: 0 OMAP SD/MMC: 1 列出mmc设备 U-Boot# mmc dev ...

  5. IBM斥资340亿美元收购红帽

    IBM宣布收购Linux巨头Red Hat,以每股190美元的现金收购其所有已发行股份,总价值约为340亿美元.这一交易是IBM历史上金额最高的一笔收购交易,也成为其在营收持续下滑的压力下,布局云计算 ...

  6. 在chrome开发者工具中观察函数调用栈、作用域链、闭包

    在chrome的开发者工具中,通过断点调试,我们能够非常方便的一步一步的观察JavaScript的执行过程,直观感知函数调用栈,作用域链,变量对象,闭包,this等关键信息的变化.因此,断点调试对于快 ...

  7. 【20181102T2】飞越行星带【智商题+最小瓶颈路】

    题面 [正解] 一眼不可做啊 --相当于求路线上穿过的点最小距离最大 最小最大--二分啊 现在相当于给一个直径,要判断这个直径是否能从左边穿到右边 我们可以在距离不超过直径的点连一条边,\(y=0\) ...

  8. 压缩的问题-----WriteUp

    原题:http://ctf5.shiyanbar.com/crypto/winrar/ 526172211A0700CF907300000D0000000000000056947424965E 006 ...

  9. JVM内存模型以及垃圾回收

    JAVA堆的描述如下: 内存由Perm和Heap组成.其中Heap = {Old + NEW = { Eden , from, to } } JVM内存模型中分两大块: NEW Generation: ...

  10. 保存全局Crash报告&发送邮件

    上篇写到,将程序中没有处理到的crash信息保存到本地文件夹下.但是实际的情况是,你不可能总是将用户的设备拿过来.所以一般性的处理是,将crash reports发送到服务器或者邮箱.所以针对上篇的代 ...