Velocity页面技术
Velocity 是一种基于java语言的模板引擎,使用这个简单、功能强大的开放格局,可以很容易的将数据对象灵活的与格式化文档(.vm文件)组装到一起。它可以使页面人员只关注页面的显示效果,java程序开发人员只关注业务逻辑编码。Context是Velocity的一个核心概念。Context在java层和模版视图层之间扮演一个“数据对象传送者”的角色:作为程序员可以将程序生成的不同类型的数据对象放入context中,对于页面设计人员,这些对象(包含数据域和命令将在模版元素中被引用)。
Velocity语法,参考:
http://www.open-open.com/doc/view/aa893717a65647f6a020c5e05b07e748
Velocity和java的配合,参考:
http://www.open-open.com/doc/view/3a175c4defc6462484dc7253ab267fa5
语法:
1.注释
注释有三种形式,与java中的注释类似,只是把java注释中的“/”改成了“#”:
(1)##这是一行注释
(2)#*
这是多行注释
这是多行注释
这是多行注释
*#
(3)#*
这是个可以加入作者、版本信息的多行注释
这是个可以加入作者、版本信息的多行注释
这是个可以加入作者、版本信息的多行注释
*#
2.引用类型
VTL(Velocity 模版语言)有三种引用类型:变量、属性和方法。在VTL中所有的类型都会解析成为String。
(1)变量
VTL的命名规则比较简单,第一个字符必须是字母,其它部分限于以下类型:
字母(a..z, A..Z)
数字(0..9)
减号(“-”)
下划线(“_”)
变量既可以通过set指令赋值,也可以通过java代码赋值。比如,yieldjava变量$foo的值为“abc”,当模版被请求,所有页面上的$foo都将被赋值“abc”。
如果在模版中赋值,则用下面的语句:
#set($foo = "abc")
对于变量的引用有两种方式:$foo 和 ${foo}。具体怎样用,视情况而定吧。
(2)属性
VTL变量的属性和其他语言累死,变量名后紧接一个“.”和另一个变量标识符,一下是属性的示例:
$customer.Address
$purchase.Total
(3)方法
VTL的方法(Method)的概念和其他语言相差无几,方法也是以$开头(命令以#开头),后接VTL标识符和VTL方法体,最后有一对括号,括号内输入可选的参数列表。以下是几个示例:
$customer.getAddress()
$page.setTitle("My Home Page")
3.静引用
<input type="text" name="email"value="$email"/>
这段代码中如果$email没有被赋值,字符串“$email”就会被显示出来,处于这方面的考虑,我们可以使用静引用,如下:
<input type="text" name="email" value="$!email"/>
在$和标识符之间用叹号隔开,这个时候当$email被赋值时和普通变量一样,但是当没被赋值时,$!email将默认为空字符串,也就不会显示咋爱页面上。
4.指令
VTL指令以#开头。
#set 指令
用于变量赋值。下面是一些例子:
#set( $monker=$bill) ##变量引用
#set($monkey.blame=$whitehouse.Leak) ##属性引用
#set($monkey.Say=["Not","my","fault"]) ##数组
#set($monkey.Map={"banana":"good","roastbeef":"bad"}) ##Map
需要注意的是:当右值是一个为空或未定义的属性或方法的引用是,左值将不会被赋值,而是依旧保存旧值。
另外就是:在使用#set指令时,双引号“”包围的文本中如果含有变量引用是会被解析的,但是以单引号‘’包围的字符串不会被解析。
if/elseif/else条件分支
#if($foo<10)
<strong>Go North</strong>
#elseif($foo==10)
<strong>Go East</strong>
#else
<strong>Go South</strong>
#end
#foreach循环
#foreach($productin $allProducts)
<li>$product</li>
#end
java中应用Velocity
一般步骤:
(1)对于所有应用,第一步要初始化Velocity,一般使用单例模式,如Velocity.init();
(2)创建一个Context object;
(3)将你的数据对象加入到Context对象中
(4)使用Velocity选择一个模版
(5)合并模版和数据导出到输出流
先做一个最简单的Velocity开发例子,让大家看看Velocity是怎样工作的:
1、创建1个文件,文件名为:hellovelocity.vm,即velocity模版(其实和html一样),内容:
Welcome$name to Javayou.com!
todayis $date.
2、创建1个java文件,HelloVelocity.java,内容:
import java.io.StringWriter;
import java.util.*;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
publicclass HelloVelocity {
public static void main(String[] args) throws Exception {
//初始化并取得Velocity引擎
VelocityEngineve = new VelocityEngine();
ve.init();
//取得velocity的模版
Templatet = ve.getTemplate("hellovelocity.vm");
//取得velocity的上下文context
VelocityContextcontext = new VelocityContext();
//把数据填入上下文
context.put("name","Liang");
context.put("date",(new Date()).toString());
//输出流
String Writerwriter = new StringWriter();
//转换输出
t.merge(context,writer);
System.out.println(writer.toString());
}
}