TinyTemplate与Velocity详细对比

  1. 云栖社区>
  2. 博客>
  3. 正文

TinyTemplate与Velocity详细对比

悠悠悠然然 2016-05-09 14:32:09 浏览1039
展开阅读全文
项目 Velocity代码 TinyTemplate代码 比较
单行注释 ##单行注释 ##单行注释
效果完全相同
多行注释
#*多行注释*#
#*多行注释*#
#--多选注释--#
效果完全相同
Tiny多一种 
定义变量 #set($a=1,$b=2) #set(a=1,b=2) 效果完全相同
Tiny不需要在变量前加$,更简洁
定义数组 #set($a=[1..5]) #set(a=[1..5],b=[5..1],c=[1+2..a+b])
Tiny的起始和终止值都可以是表达式或常量
全局变量定义 N/A #!set
如果不加!,表示在当前域内定义变量,如果加了!表示在全局定义变量,使用#!set定义的变量在整个模板都可以被访问,而#set如果定义的变量在循环体内,则只在循环体范围内可以被访问。
定义map #set($a={"a" : 1, "b" : "s"}) #set(a={"a":1,"b":"s","c":[1..5]},b={"a"+1:1,"b"+c:"s"}}
其中c是一个变量
Tiny的键值和值都可以是各种类型的对象,并且支持各种表达式计算
循环 #foreach( $item in $items)
#foreach( item in items)
#for( item in items)
#foreach( item : items)
#for( item : items)
Tiny支持的方式多一些
所有的对象都可以用来进行进行循环
break #break #break
#break(i<3)
Tiny支持条件或无条件两种方式
stop #stop #stop
#stop
Tiny支持条件或无条件两种方式
continue N/A #continue
#continue(i<3)
Tiny支持条件或无条件两种方式

evaluate


#evaluate( 'string  #if(true)will be displayed#end' ${eval('string  #if(true)will be displayed#end')
${evaluate('string  #if(true)will be displayed#end')
效果完全相同
parse
 #parse( "lecorbusier.vm" )
#include("include-sub.vm")
#include("../include-sub.vm")
#include("/template/tiny/test/include-sub.vm")
#include("include-sub.vm", {"myvar": "hello from parent"})
Tiny支持传参
include  #include( "disclaimer.txt" "opinion.txt" )
${read("disclaimer.txt")}
${readContent("disclaimer.txt")}
Tiny支持各种相对和绝对地址
define #define( $hello )
 Hello $who 
#end 
#set( $who = "World!") 
$hello 
#macro hello(who)
   hello ${who}
#end
#set(who = "World!") 
#hello(who)
#hello
#set(result=call("hello"))
#set(result=call("hello",who))
运行结果完全一致
macro #macro(macroName $a,$b)
   $bodyContent
#end
#macro macroName(a,b)
#bodyContent
#end
#macro a()
 #bodyContent
#end
#macro b()
#@a()
 #bodyContent
#end
#end
表面上是一样的,但是Tiny的性能更高,内存更少
Tiny的支持嵌套,Velocity不支持嵌套
macro N/A 通过java代码扩展宏
调用宏 #macroName("a" "b")
#@macroName("a" "b")
info
#end
#macroName("a","b")
#@macroName("a" "b")
info
#end

#@macroName(b:"b")
info
#end


Tiny不仅支持顺序参数访问,还支持命名参数访问,当有时参数可以省略时更方便
#[[]]# #[[]]#
#[[]]#
完全一样
I18N N/A $${ab.key} Tiny完美支持I18N扩展
$!{} 强制非空输出 强制进行html转码输出
call N/A #call("aa"+1,para1,prar2)
#@call("aa"+1,para1,prar2)
info
#end
有的时候宏的名字,需要根据传来的参数进行拼接之后,能知道调用的宏的名字的时候,可以通过#call指令进行调用
精确格式 N/A #b,#{b}显示空格
#t,#{t}显示缩进
#[,#{[}缩进加一层
#],#{]}缩进减一层
如果需要,Tiny模板引擎可以对格式进行严格输出,做控制输出为各种严格的格式。
模板文件加载 需要通过配置文件指定 全自动识别,无须干预
布局支持 N/A 可以自动对页面进行多重渲染 这个特性使得DRY原则完全落实,也使得程序员只需要做自己需要做的一点页面就可以了,可以让整个网站无重复,而且可以使得同一个页面在不同的工程中完全融入到工程所有的页面体系中。是Tiny模板引擎中最具特色且功能强大的功能。
同时在布局文件中可以定义多个位置,每个位置都可以在子页面中进行定制化实现。
函数扩展 支持 支持
类方法扩展 N/A 可以现有类或接口添加扩展方法从而扩充现有类的功能。 比如:给Object上增加toXml(),toJson()方法,就可以方便的生成xml或json了:
${user.toXml()}
${user.toJson()}

#set(aa=user.toXml())
#set(aa=user.toJson())

宏参数默认值 N/A #macro testParameter(aa=var+3, bb=123,cc)
#set(var="def")
#macro testParameter(aa=var+3, bb=123,cc)
    aa:${aa},bb:${bb},cc:${cc}
#end
#set(cc="11111")
#testParameter()
运行结果:
aa:def3,bb:123,cc:11111

对Velocity的一些语法进行验证后再行添加,也欢迎童鞋们纠正我对Velocity理解错误的地方。

网友评论

登录后评论
0/500
评论
悠悠悠然然
+ 关注