110 likes | 246 Views
LOGO. Velocity 模板语言介绍. 演讲者:程小强. 1.Velocity 概述 ?. Velocity 是一个基于 java 的模板引擎( template engine:模板引擎的作用就是取得数据并加以处理,最后显示出数据 )。 它允许任何人仅仅简单的使用模板语言( template language) 来引用由 java 代码定义的对象。. 2 . Velocity工作流程和原理. 初始化Velocity. 创建Context对象 添加数据到Context 选择模板 合并模板和数据产生输出页面. 2 . Velocity工作流程和原理.
E N D
LOGO Velocity 模板语言介绍 演讲者:程小强
1.Velocity概述? Velocity是一个基于java的模板引擎(template engine:模板引擎的作用就是取得数据并加以处理,最后显示出数据)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。
2.Velocity工作流程和原理 • 初始化Velocity. • 创建Context对象 • 添加数据到Context • 选择模板 • 合并模板和数据产生输出页面
2.Velocity工作流程和原理 • 初始化Velocity. • 创建Context对象 • 添加数据到Context • 选择模板 • 合并模板和数据产生输出页面 public static void main(String[] args) throws Exception { Velocity.init(); VelocityContext context = new VelocityContext(); context.put("name", “Velocity"); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter( System.out)); Template template = Velocity.getTemplate("src/velocity/hello.vm"); template.merge(context, writer); writer.flush(); writer.close(); }
3.VTL介绍 VTL提供一种简单、容易和干静的方法将动态内容合并到Web页面。VTL使用引用(references)将动态内容插入到Web页面中。变量是一种引用,可以指向Java代码中的定义内容,或者由Web页面中的VTL语句来获得值。 例如:#set( $a = "Velocity" ) VTL语句以#开头,并包含指令(set)。变量以$开头,用引号引起 VTL语法包括: 1,注释(单行注释以##开始和多行注释包括在#*和*#之间) 2,引用(References) 3,指令(Directives)
注释 单行注释以##开始和多行注释包括在#*和*#之间 引用(references) VTL有3种类型的引用:变量、属性和方法 指令(directives) 单击此处添加文字内容 单击此处添加文字内容 单击此处添加文字内容 1 2 3 VTL语法
变量引用 • 属性引用 • 方法引用 引用类型 1)变量 变量的格式: $VTL标识符 VTL标识符以字母开始, 由字母、数字、 横划线(-)或下划线(_)组成。 例如下面的例子: #set( $foo = "gibbous" ) $moon = $foo 输出结果是:$moon = gibbous 举例 (2)属性 属性的格式: $VTL标识符. VTL标识符 下面是属性引用的例子: $customer.Address $purchase.Total 拿第一例子来说,有两种意思: 返回Hashtable对象customer中 键值 为Address的值 $customer.getAddress()方法 引用的缩 写(JavaBean属性 的getter方法) 至于是哪种情况,Velocity会做 决定,返回合适的值。 (3)方法 方法的格式: $VTL标识符(参数列表) 下面是方法引用的例子: $customer.getAddress() $purchase.getTotal() $page.setTitle( "My " ) $person.setAttributes( ["S", "W", "E"] )。 引用(references)
详解以下VTL常用操作符 关系和逻辑操作符 Velocity 也具有逻辑AND, OR 和 NOT 操作符。 如 ## example for AND #if($foo && $bar) <strong> This AND that</strong> #end 例子中#if() 指令仅在$foo 和$bar 都为真的时候才为真。如果$foo 为假,则表达式也为假;并且 $bar 将不被求值。如果 $foo 为真,Velocity 模板引擎将继续检查$bar的值,如果 $bar 为真,则整个表达式为真。并且输出This AND that 。如果 $bar 为假,将没有输出因为整个表达式为假。 http://velocity.apache.org/engine/devel/vtl-reference-guide.html
详解以下VTL常用指令 指令 1.#set 2.#if / #elseif / #else 3.循环:foreach 4.#include 5.#parse 6.#stop 7.#macro 8. #break - Stops the current directive http://velocity.apache.org/engine/devel/vtl-reference-guide.html
以下只做了解 其他 1.转义字符'\'的使用 如果reference被定义,两个’\’意味着输出一个’\’,如果未被定义,刚按原样输出。 2.内置对象 $request、$response、$session,另外,模板内还可以使用 $msg内的消息工具访问 Struts 的国际化资源,达到简便实现国际化的方法。 3.数组访问 对数组的访问在Velocity中存在问题,因为Velocity只能访问对象的方法,而数组又是一个特殊的Array,所以虽然数组可以进行循环列举,但却不能定位访问特定位置的元素,如 strs[2],数组对固定位置元素的访问调用了Array的反射方法get(Object array, int index),而Velocity没能提供这样的访问,所以数组要么改成List等其他类容器的方式来包装,要么就通过公用Util类的方式来提供,传入数组对象和要访问的位置参数,从而达到返回所需值的目的。 http://velocity.apache.org/engine/devel/vtl-reference-guide.html