闲人野居
好好学习,天天向上
posts - 57,  comments - 137,  trackbacks - 0
    一个古老而又强大的模版引擎。在模版引擎中,velocity中,应该属于最常用的,不管是在maven的项目模版,还是在源代码输出,甚至直接网页输出中,都可以看到其身影。当然,最近的freemarker大有平分天下之意。
   以前的时候,曾用velocity设计过一个自动代码的项目,在用的过程中,享受了其简单而又灵活的功能。后来由于,自动代码的项目一直没有什么进展,也就很少去关注velocity。这段时间,被jsf搞得焦头烂额,最后想起了velocity,看看能不能用其来实现替换jsf的标记库功能。于是又复习了一遍velocity。
   先来看看velocity的语法:vtl也就是velocity的基本语言.用过脚本语言的,对于这个应该会很容易上手,其实,基本上,语法可以分为变量和关键词。先来看看变量,变量使用$作为开头符号,$a 和${a}是一致的。类似于jstl中的变量定义。在模版中声明一个变量是很容易的,使用set关键字
   #set( $foo = "Velocity" )。对于velocity中,感觉比较灵活的就是变量中,可以直接使用方法,和javabean属性一样方便使用:
   对于javabean 支持内置属性,如下:$customer.Address,$purchase.Total,$customer.Address.phone。不过好像不支持map语法,如:
a["key"]这种写法。但是可以使用方法代替:a.get("key")。而使用了方法,感觉就在使用java代码一样方便。当然变量中支持简单的表达式计算:$a+1等等
   有一点需要注意的是,如果变量没有解析,还是会输出$a这个变量,而不是空白,或者报错,这一点,不知道是方便还是不方便。
   语法中另外一个,就是关键字了,关键字使用#开头。
   其关键字也不多,只有少数的几个,但是已经足够用了。如前面的声明变量:#set
   #if #elseif #else  #end 这是最常用的条件判断,每个判断使用#end结尾
   #if($a==1)true enough#{else}no way!#end

   #foreach() #end用于循环输出
   #foreach( $key in $allProducts.keySet() )
    <li>Key: $key -> Value: $allProducts.get($key)</li>
   #end
  
   #include,用于包括一些资源文件,当然include是不会去解析资源文件,这和#parse不同
   #include( "one.txt" )

   #parse,用于解析并且包括相应的资源文件
   #parse( "me.vm" ),和主文件共享相应的Context
  
   #stop,用于停止执行解析,并返回,主要用于调试功能。

   基本上,使用以上的语法,可以定义出任何的模版了。当然,为了简化模版的定义,velocity特意推出了#macro这个强大的功能.
   #macro,类似于宏定义,用于自定义相应的标记。
   如下定义了一段宏,用于输出表格中的列表
   #macro( tablerows $color $somelist )
    #foreach( $something in $somelist )
        <tr><td bgcolor=$color>$something</td></tr>
    #end
   #end
  
   在模版中,只需要使用#tablerows($color $somelist)就可以取代里面的代码了:
   #set( $greatlakes = ["Superior","Michigan","Huron","Erie","Ontario"] )
   #set( $color = "blue" )
  <table>
     #tablerows( $color $greatlakes )
  </table>
 
   而且#macro 支持内嵌语法,所以对于模版的定义,就变得更加的灵活而简单了。
  


posted on 2007-05-14 08:30 布衣郎 阅读(4971) 评论(4)  编辑  收藏 所属分类: web view技术

FeedBack:
# re: 关于velocity 一语法篇
2007-05-14 08:50 | Welkin Hu
这些东东和XSLT相比,有些什么优势呢?  回复  更多评论
  
# re: 关于velocity 一语法篇
2007-05-14 10:34 | 布衣郎
@Welkin Hu
xslt需要xml支持,而vm不需要  回复  更多评论
  
# re: 关于velocity 一语法篇
2007-08-26 22:05 | upgrades
jsf和velocity能否一起工作?我很想知道这个问题!  回复  更多评论
  
# re: 关于velocity 一语法篇
2007-12-06 17:04 | winhkey
有一点需要注意的是,如果变量没有解析,还是会输出$a这个变量,而不是空白,或者报错,这一点,不知道是方便还是不方便。


尽量规范点用${a}代替$a,要防止你说的情况就用$!{a},有数据就出数据,没数据就是空白  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 

<2007年5月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用链接

留言簿(12)

随笔分类(59)

随笔档案(57)

blog

java

uml

搜索

  •  

积分与排名

  • 积分 - 355597
  • 排名 - 154

最新评论

阅读排行榜

评论排行榜