转载 FreeMarker vs. Velocity

1、概述<o:p></o:p>

l         Velocity是一个简单而且更加轻量级的工具,但是它没有达到FreeMarker能够做的许多任务,而且它的模板语言不是很强大<o:p></o:p>

l         我们认为对于大多数应用程序,FreeMarkerVelocity工作更简单,因为:<o:p></o:p>

Ø         使用Velocity,你需要寻找特定工具或各种工作环境来一次次的解决典型的模板创作任务,结果会浪费更多时间<o:p></o:p>

Ø         工作环境经常意味着在Velocity模板中直接使用Java对象的方法,这违反了简单、无编程HTML设计的观念<o:p></o:p>

Ø         或者将表示任务移到控制器代码中,这违反了MVC模式<o:p></o:p>

l         使用FreeMarker,可以以out-of-the-box(如何翻译确切?)的方式实现Velocity所能做的<o:p></o:p>

 <o:p></o:p>

2、特性比较清单<o:p></o:p>

下面是一个使用FreeMarker能够实现,而Velocity不能实现的不太全面的特性清单:<o:p></o:p>

1)数字和日期支持<o:p></o:p>

l         可以对任何数字类型进行算术运算和比较,包括精度类型<o:p></o:p>

l         可以比较和显示(格式化)日期/时间值<o:p></o:p>

2)国际化<o:p></o:p>

l         根据各种内建和定制的数字格式,格式化本地敏感的数字<o:p></o:p>

l         根据各种内建和定制的日期格式,格式化本地敏感和时区敏感的日期<o:p></o:p>

l         标识(变量名)可以包含非英语字符,如重音字符、阿拉伯字符、中文字符等<o:p></o:p>

3)循环处理<o:p></o:p>

l         可以跳出循环<o:p></o:p>

l         可以在循环外访问循环体内的控制变量<o:p></o:p>

l         可以测试是否达到最后一次循环<o:p></o:p>

4)模板级别的数组处理<o:p></o:p>

l         可以使用类似[i]语法的索引方式访问数组元素<o:p></o:p>

l         可以查询数组长度<o:p></o:p>

5)宏<o:p></o:p>

l         宏可以有局部变量<o:p></o:p>

l         可以递归调用宏,同样可以在模板的后面定义要调用的宏<o:p></o:p>

l         调用宏时,可以按位置或名字的方式传递参数<o:p></o:p>

l         宏参数可以有缺省值,使得在调用时忽略参数也有效<o:p></o:p>

l         调用的宏可以有嵌套的体内容(<@myMacro>body</@myMacro>),能够在宏被调用时进行处理<o:p></o:p>

l         宏是纯变量的,可以基于表达式来执行宏,或者作为参数传递给另一个宏<o:p></o:p>

6)命名空间<o:p></o:p>

l         可以对变量使用多命名空间,这对创建宏库很重要,因为这可以避免应用程序中指定的变量和宏库中变量的名字冲突<o:p></o:p>

7)使用内建的函数/操作符维护Java无关的stringlistmap<o:p></o:p>

l         可以将字符串转换成大/小写、首字符大/小写,对HTMLXMLRTF进行转义处理,substringsplit、查询字符串长度、find/replace子串等等<o:p></o:p>

l         通过索引访问list元素,获得子list,合并list,查询list长度,对list排序<o:p></o:p>

l         通过key变量访问map元素,检查map是否为空,获得key或值的list<o:p></o:p>

8)揭示模板中的错误<o:p></o:p>

l         当访问一个未定义的变量,FreeMarker不会沉默;你可以配置FreeMarker来停止render模板显示错误信息,或者跳过错误部分;无论哪种,FreeMarker会记录问题(日志)<o:p></o:p>

l         在写错指令名时,FreeMarker会抛出异常<o:p></o:p>

9)高级render控制<o:p></o:p>

l         可以使用一组标记来封装模板的一块区域,以便在块区中所有要修改的地方应用HTMLXML转义(或其它使用FreeMarker表达式表示的转换)<o:p></o:p>

l         FreeMarker有转换器,它们是模板的一块区域,在render时,通过转换过滤;内建的转换器包括空白字符压缩、HTMLXML转义;你可以实现自己的转换器;当然转换器可以嵌套<o:p></o:p>

l         可以使用flush指令显式的flush输出<o:p></o:p>

l         可以使用stop指令停止render<o:p></o:p>

10)文字<o:p></o:p>

l         除了通常的字符串、数字和布尔值文字,也可以在模板中定义listmap文字<o:p></o:p>

l         支持所有的Java转义文字:\b\t\n\f\r\”\’\\,也支持\xXXXX使用UNICODE指定字符<o:p></o:p>

11)高级空白字符移除<o:p></o:p>

l         FreeMarker坚持移除各行只包含不输出FreeMarker标记的空白字符<o:p></o:p>

l         对于明显要整修掉不需要的空白字符的指令来说,空白字符是个大问题
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值