Velocity使用

官方文档:http://velocity.apache.org/engine/devel/user-guide.html

1.使用规范

  变量:非正式变量由“$”开头

$foo
$mudSlinger
$mudslinger
$mud_slinger
$mudSlinger1

  属性:变量后用" . "连接的其他VTL标识符

$customer.Address
$purchase.Total

在第一个例子中$customer.Address 有两种含义。它可以表示:查找 hashtable 对象 customer 中以
Address 为关键字的值;也可以表示调用 customer 对象的 getAddress()方法。当你的页面被请求时,
Velocity 将确定以上两种方式选用那种,然后返回适当的值。

  方法:变量后.xYx()

$customer.getAddress()
$purchase.getTotal()
$page.setTitle( "My Home Page" )
$person.setAttributes( ["Strange", "Weird", "Excited"] )

跟上面提到的一样 $customer.Address属性和使用$customer.getAddress()方法具有相同的效果,就是方法可以传参数你们懂得。

但VTL不会将.xYx解释为对象的实例变量:$foo.Name 将被解释为 Foo 对象
的getName()方法,而不是Foo 对象的Name 实例变量。

  正式的规范

${mudSlinger}
${customer.Address}
${purchase.getTotal()}

用{}括起来

为了防止出现  比如说你定义了一个$vice 变量  但是出现—> Jack is a $vicemaniac. 这种情况。

  防止空值

<input type="text" name="email" value="$email"/>
<input type="text" name="email" value="$!email"/>   ##非正式
<input type="text" name="email" value="$!{email}"/>  ##正式写法

如果$没有值则可以使用上述写法 将其替换为一个空字符串 顺便说下Velocity只有String形式的 传入的其他形式都会被自动转成String

2.注释

  单行注释

## This is a single line comment.

  多行注释

#*
 Thus begins a multi-line comment. Online visitors won‘t
 see this text because the Velocity Templating Engine will
 ignore it.
*#

3.#set

  给变量赋值的方法

#set( $monkey = $bill ) ## 变量
#set( $monkey.Friend = "monica" ) ## 字符串
#set( $monkey.Blame = $whitehouse.Leak ) ## 属性
#set( $monkey.Plan = $spindoctor.weave($web) ) ## 方法
#set( $monkey.Number = 123 ) ##数字
#set( $monkey.Say = ["Not", $my, "fault"] ) ## ArrayList
#set( $monkey.Map = {"banana" : "good", "roast beef" : "bad"}) ## Map

在ArrayList中$monkey.Say.get(0)获得第一个元素

在Map中使用 $monkey.Map.get("banana") 获得 ‘good‘  $monkey.Map.banana 也有着同样的效果

#set( $result = $query.criteria("name") )
The result of the first query is $result

#set( $result = $query.criteria("address") )
The result of the second query is $result

在上述情况中如果$query.criteria("name") 返回"bill" 但是$query.criteria("address") 返回值为空则会出现下面结果

The result of the first query is bill

The result of the second query is bill

所有最好不要以循环Set的结果 是否为空判断是否成功赋值 具体例子参照官方文档好了

另外需要注意 在默认情况下

#set( $foo = "bar" )
$foo
#set( $blargh = ‘$foo‘ )
$blargh

结果为

 bar
 $foo

说明Velocity赋值时使用单引号时只会传个字符串过去 不会传相应变量的值过去。这个可以修改默认设置,后面还有提到在页面输出Velocity指令的方法 具体看官方文档 。

4.If / ElseIf / Else

#if( $foo )
   <strong>Velocity!</strong>
#end
  • 当以下条件时if后的语句才会被执行
  • 当$foo是布尔类型并且值为true
  • 当$foo是字符串或者为集合并且字符串不为null、集合不为空
  • 当$foo是一个对象(非集合或者字符串)并不为空
  • 其实Velocity环境中只包含对象,例如上述的boolean值最终会转成Boolean类返回。

下面说else

#if( $foo < 10 )
    <strong>Go North</strong>
#elseif( $foo == 10 )
    <strong>Go East</strong>
#elseif( $bar == 6 )
    <strong>Go South</strong>
#else
    <strong>Go West</strong>
#end

就这样的语法应该一看就会懂的.

需要注意的是

Velocity中的 == 与 Java中的 == (只能比较对象是否相同)有些轻微的不同。在velocity中的等号运算符可以直接比较数字,字符串或者对象。 当比较的对象不在同一个类时,Velocity会通过其toString()方法将其传换后再进行比较。

其他情况:比如说AND中第一个为假后面语句不执行之类的跟JAVA中都类似就不说了

还有一个注意的点

##logical NOT

#if( !$foo )
  <strong>NOT that</strong>
#end

在上面代码中

如果 $foo为真,那么 !$foo 会为假, 并且不会有输出. 反正当$foo为假时,!$foo为真"NOT that"将会被输出 . 要注意不要跟上述表单避免空值的 $!foo  搞混了。 !$foo不是$!foo

并且上述比较符可以被 eq, ne, and, or, not, gt, ge, lt, and le 等替换 具体对应关系自己查吧。

5.#foreach

<ul>
#foreach( $product in $allProducts )   ## 每次循环$allProducts中的值都将会被替换到$product中
    <li>$product</li>
#end
</ul>

$allProducts 可以是一个 Vector、Hashtable 或者 Array。

如果$product是一个产品类,它的属性name可以这样取出来 $product.Name(ie: $Product.getName())

如果$allProducts是个HashMap并且你想同时取出key 和 其对象你可以这样写

<ul>
#foreach( $key in $allProducts.keySet() )
    <li>Key: $key -> Value: $allProducts.get($key)</li>
#end
</ul>

你要想获得循环次数($foreach.count)可以这样写

<table>
#foreach( $customer in $customerList )
    <tr><td>$foreach.count</td><td>$customer.Name</td></tr>
#end
</table>

Velocity中貌似没有跟JSTL一样的 begin 或End 参数来限制循环次数、开始或结束条件  为了达到相同效果 你可以这么写

## list first 5 customers only
#foreach( $customer in $customerList )
    #if( $foreach.count > 5 )
        #break
    #end
    $customer.Name
#end

和JSTL不同Velocity中的循环是默认从1开始的  可以改成从零开始具体看官方文档

另外在其他教程里 循环次数也可以写成$velocityCount 这个我也试过确实是可行的

官方给的判断是否是循环的最后一个的例子也可以参考下

#foreach( $customer in $customerList )
    $customer.Name#if( $foreach.hasNext ),#end
#end

其他的关于文件的引入、宏之类的感觉不怎么常用以后再补充吧....

这算是个人的学习笔记了 其中可能有些理解错误,欢迎指正...

时间: 2024-08-10 23:01:44

Velocity使用的相关文章

JSP FreeMarker Velocity 原理

JSP原理 JSP的运行原理:JSP 本质上是一个Servlet. 每个JSP 页面在第一次被访问时,JSP引擎将它翻译成一个Servlet 程序,然后再把这个 Servlet 源程序编译成Servlet 的class 类文件.然后再由WEB 容器(Servlet容器)像调用 Servlet 程序一样的方式装载和解释执行这个由JSP 页面翻译成的 Servlet 程序. FreeMarker 和 velocity 原理 在Struts2框架下,Struts2框架充当了之前的Servlet角色,只

Velocity初探小结--Velocity在spring中的配置和使用

最近正在做的项目前端使用了Velocity进行View层的数据渲染,之前没有接触过,草草过了一遍,就上手开始写,现在又回头细致的看了一遍,做个笔记. velocity是一种基于java的模板引擎技术,有点类似与JSP,它允许页面设计者引用Java中定义的方法.前端页面设计者和后端Java开发者能够同时使用MVC的模式开发网站,这样前端能够把精力放在页面的设计上,后端也可以把精力放在代码开发上.Velocity把Java代码从Web页面中分离, 使网站可维护性更强. 注:项目使用的是Spring+

Velocity魔法堂系列三:模板与宿主环境通信

一.前言 Velocity作为历史悠久的模板引擎不单单可以替代JSP作为Java Web的服务端网页模板引擎,而且可以作为普通文本的模板引擎来增强服务端程序文本处理能力.而且Velocity被移植到不同的平台上,如.Net的 NVelocity和js的Velocity.js,虽然各平台在使用和实现上略有差别,但大部分语法和引擎核心的实现是一致的,因此学习成本降低不少 哦. 最好的学习资源——官网:http://velocity.apache.org/ 本系列打算采用如下结构对Velocity进行

Maven项目管理:SpringMVC+Mybatis+Velocity整合笔记

Maven创建项目 略…具体过程可参考用Maven创建第一个web项目 配置Spring MVC 导入Spring MVC 需要的包在pom.xml 文件下加入: 123456789101112 <!-- spring mvc begin --><dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <v

使用 Velocity 模板引擎快速生成代码

原文地址:http://www.ibm.com/developerworks/cn/java/j-lo-velocity1/ Velocity 是一个基于 Java 的模板引擎,它允许任何人仅仅简单的使用模板语言来引用由 Java 代码定义的对象,从而实现界面和 Java 代码的分离,使得界面设计人员可以和 Java 程序开发人员同步开发一个遵循 MVC 架构的 web 站点.但是在实际应用过程中,Velocity 又不仅仅被用在了 MVC 的架构中. Velocity 模板引擎介绍 在现今的软

spring+velocity+javamail发送模板邮件

有时候当我们注册完的时候系统会提示有一封邮件发送到了你的邮箱,如何做呢? 就要用到spring+velocity+javamail这3个玩意,其实只用了spring,因为其他2个都被spring集成了. 先看代码 package com.worthtech.app.util; import java.io.File; import java.util.Map; import javax.mail.MessagingException; import javax.mail.internet.Mim

Spring+Velocity模板发送邮件

Spring+Velocity模板发送邮件 1.在eclipse中新建一个Java Project, 命名为spring-velocity-mail 2.在项目下新建一个lib目录,导入需要的jar包 依赖包如下: commons-collections-3.2.1.jar commons-lang-2.6.jar commons-logging-1.2.jar mail.jar spring-beans-3.2.2.jar spring-context-3.2.2.jar spring-con

velocity 数字分割宏

velocity 数字格式化处理 #macro(numSplit $num $digits) #set($nums = "$!{num}.0") #set($arr = $nums.split("\.")) #set($int = $arr[0]) #set($digit = $arr[1]) #set($pad = $digits - $digit.length()) #if($pad > 0) #foreach($i in [1..$pad]) #set(

velocity 显示List和Map方法

一.遍历个map类型 1.先看后台java程序Java代码 Map<String,String> paramValues=new HashMap<String, String>();      ***      *** 中间赋值操作省略了      ***      data.put("paramValues", paramValues);//传值给velocity 2.前台velocity模板文件中取出这个map的key和valueJava代码 #foreac

velocity基本语法

一.基本语法 1."#"用来标识Velocity的脚本语句,包括#set.#if .#else.#end.#foreach.#end.#iinclude.#parse.#macro等: 如: #if($info.imgs) <img src="$info.imgs" border=0> #else <img src="noPhoto.jpg"> #end 2."$"用来标识一个对象(或理解为变量):如