Velocity语言的介绍

                                                    2016-09-06 15:39:25     

语言介绍            

Velocity是一种Java模版引擎技术,是一个基于Java的模板引擎(template engine)。她允许任何人简简单单的使用模板语言类引用由Java代码定义的对象。

当Velocity应用于web开发时,界面设计人员可以和Java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由java程序员关注业务逻辑编码。Velocity将Java代码从web页面中分离出来,这样web站点的长期维护提供了便利,同时也为我们在JSP和PHP之外又提供了一种可选的方案。

基础使用             

在Velocity中,变量的定义都是使用“$”开头的,$作为Velocity的标识符。字母、数字、中划和下划线都可以作为Velocity的定义变量。

Velocity——注释

  单行注释,使用##           如:##<div class="tt">$shopUser.username</div> 会隐藏此div

  多行注释,使用 #* comment *#      如: #* <div class="tt">$shopUser.username</div> *#

Velocity——引用

注意:规范的引用写法应该是${Foo},也可以使用下面的形式; 规范的肯定是不会错的。

如果没有对应的引用,VTL会作为普通的字符串处理。

在Velocity Template Language(VTL)中,有三种类型的引用: 变量,属性,方法。

所有的引用都被看做是字符串,如果某个引用是一个整型值,Velocity会调用toString()方法,将她转换为String。

变量:(如:$username)

变量是由$和紧跟其后的VTL标识符组成的。

VTL标识符必须以字母开头,后面可以包含并且仅能包含字母、数字、下划线以及减号。

像$2.4这样的字符串,是不会被识别为变量的,因为2.4不是一个VTL标识符。

属性:(如:$shopUser.username)

属性是由四部分组成,依次是$+VTL标识符+“.”+VTL标识符。

这个标识符有两个含义,它可以表示在shopUser标记的hashtable中寻找并返回这个key对应的value,也可以表$shopUser.getUsername这个方法(方法在java程序中定义)。如:{'$!shopUser.getUsername()'}。

方法:如($shopUser.getPass("test"))

方法是由四部分组成,依次是$+VTL+'.'+函数调用。这里的函数调用是可以带参数的。

很显然,属性有时是方法的一种简写,$Foo.bar和$Foo.getbar()是等价的,这种情况下,尽量使用属性的形式。但是方法有参数的话,就没有和它等价的属性了。

属性的搜索规则:

属性可以表示为调用方法,也可表示从hashtable中找值,对于$Foo.bar来说,Velocity会按照以下顺序解析:

$Foo.getbar()>$Foo.getBar()> $Foo.get("bar")>$Foo.isBar()

而对于$Foo.Bar来说,Velocity会按照以下顺序解析:

$Foo.getBar() > $Foo.getbar() > $Foo.get("Bar") > $Foo.isBar()

所以,前两个是寻找方法,第三个是在hashtable中找值,第四个是一个is判断。

另外需要注意的是,属性不会被解析为对象的实例变量。$Foo.bar可以表示$Foo.getbar()或者$Foo.get("bar"),但是它不表示Foo这个java对象的bar属性。

Velocity——指令

引用可以让模板设计者生成动态内容,而指令允许设计者真正的负责页面的展现和内容。

#Include和#Parse都是用于将本地文件引入当前文件的指令,而且被引入的文件必须位于TEMPLATE_ROOT(配置Velocity视图文件时设置的路径,稍后再SpringMvc整合Velocity时介绍)。

#Include

被#Include引入的文件,其内容不会被Velocity引擎解析,所以这些文件应该是静态模板,即不含有VTL的模板。使用#Include()指令时,参数是被双引号括起来的文件名或者是表示文件名的变量。如果有多个文件,以逗号隔开即可。比如#Include("mode.vm", "b.html", $file)。

#Parse

#Parse用来在当前模板中引入并执行另一个(本地的)模板——可以是静态的,也可以是动态的——并把结果嵌入到当前位置。#Parse()指令的参数,可以是一个双引号括起来的文件名,也可以是一个变量,但是它不能接受多个参数

被#Parse引入的文件仍然可以使用#Parse指令。在velocity.properties文件中有一个属性directive.parse.max.depth,默认值是10,它指定了#Parse嵌套的最大层次。既然#Parse嵌套是允许的,#Parse递归也是允许的。

假如a.vm #Parse b.vm,那么a.vm中定义的变量$v,在b.vm中可以随便使用。如果b.vm也定义了$v,那么b.vm中用到的将会是自己的$v,而不是a.vm中的$v。

#set

#set指令用于向一个变量或者属性赋值。

  其格式为 #set($username="chen")或者#set($username.bar=$test) 。

#if

#if指令用于判断某个条件是否为true。形式: #if()  #elseif()  #else  #end,和java中的用法基本相同。如下:

#if($userNameMap.get("name") == 'zhangsna')
<div class='tt'>$userNameMap.get("name")</div>
#elseif($userNameMap.get("name") == 'zhangsan')
<div class='tt'>不是zhangsna</div>
#else
<div class='tt'>什么都不是</div>
#end

#foreach  

#foreach($userName in $userNames)
$userName</br>
#end

上面这个例子中,$userNames可以是一个Vector,一个HashTable,一个数组。

在Velocity中,有一个变量$velocityCount用作循环计数,初始值是1。这个变量的名字和初始值是在velocity.properties文件里配置的。

Velocity——运算

判断是否为null

1、#if (! $userName) 判断$userName为空,判断非空为 #if ($userName)

2、使用null工具判断

#if($null.isNull($userNames))

在需要这个判断作为一个判断字句时,比如我要你判断一个集合为null或为空时只能使用这种方式了:

$if ($null.isNull($userNames) || $userNames.size()==0)

3、判断为空的方法

#if("" == $变量名) 或 #if("" != $变量名)

"!"的使用

“!”用来强制把不存在的变量或变量值为null的对象显示为空白。

如当页面中包含$userName,如果userName对象有值,将显示msg的值,如果不存在msg对象,则在页面中显示$userName字符。

Velocity——宏

#macro(d)

#macro指令用于定义一个VTL模板的重复代码块——宏。如:

#macro(d)
<tr><td>宏</td><tr>
#end

Velocity中写入#d或者#d(),则会替换为‘<tr><td>宏</td><tr>’。

#macro(d $name)

宏也可以带参数,而且是任意多个参数。不过,宏定义时有几个参数,宏调用时就要提供同样数目的参数。

#macro( d $name)
<tr><td>$name</td></tr>
#end
#d("name1")

宏的参数可以是以下VTL元素中的任意一种:引用、字符串字面值、数值字面值、整数范围(比如[1 .. 10]、[$start .. $end])、数组、布尔值true或者false。

SpringMVC整合Velocity        

Velocity现在应用非常广泛,现在尝试将SpringMVC项目与Velocity整合

整合过程

1、主要涉及改变的文件:
  pom.xml(引入velocity的jar包)
  pbqshop-servlet.xml(视图配置,配置velocity)
  velocity.properties(velocity配置文件)

  1)pom.xml中引入Velocity是由的jar包

<!-- Velocity 模板 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>velocity-tools</groupId>
<artifactId>velocity-tools-generic</artifactId>
<version>1.2</version>
</dependency>

  2)pbqshop-servlet.xml中视图配置

 <!-- 视图模式配置,Velocity配置文件 -->
<bean id="velocityConfigurer" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
<property name="resourceLoaderPath" value="template"></property>
<property name="configLocation" value="classpath:velocity.properties"></property>
</bean>
<!-- 配置后缀 -->
<bean id="velocityViewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
<property name="contentType" value="text/html;charset=UTF-8"></property>
<property name="suffix" value=".vm"></property>
</bean>

  3)velocity.properties(velocity配置文件)

#encoding
input.encoding=UTF-
output.encoding=UTF-
contentType=text/html;charset=UTF-
#autoreload when vm changed
file.resource.loader.cache=true
file.resource.loader.modificationCheckInterval=
resource.manager.defaultcache.size=
parser.pool.size=
velocimacro.library.autoreload=false

Velocity语言的介绍的更多相关文章

  1. 【个人笔记】002-PHP基础-01-PHP快速入门-02-PHP语言相关介绍输

    002-PHP基础-01-PHP快速入门 02-PHP语言相关介绍 1.PHP是什么 Hypertext Preprocessor超文本预处理器 是一种通用开源脚本语言 Personal Home P ...

  2. Cocos2d-x 脚本语言Lua介绍

    Cocos2d-x 脚本语言Lua介绍 本篇博客记录Lua学习.学习来自eoe论坛,Lua语言开发Cocos2d-x游戏入门视频教程,猛戳下面地址: http://www.eoeandroid.com ...

  3. 一、Go语言开篇介绍

    Go语言开篇介绍 Go语言 是Google公司 在2007开发一种静态强类型.编译型语言,并在 2009 年正式对外发布. Go语言以其近C的执行性能和近解析型语言的开发效率,以及近乎于完美的编译速度 ...

  4. Lua语言的介绍和编程语言的归类

    Lua 本条目介绍的是一种编程语言.关于关于Lua在维基百科中的使用,请见"维基百科:Lua".关于"Lua"一词的其他意思,请见"卢阿". ...

  5. go语言基本介绍

    Golang发展历史 1. 诞生历史a. 诞生与2006年1月2号下午15点4分5秒b. 2009发布并正式开源c. 2012年第一个正式版本Go 1.0发布d. 截至到2017年8月24号Go 1. ...

  6. Velocity模板引擎介绍

    整理下Velocity使用方法,整理比较详细用例 1 Velocity基础语法 1.1 用户和开发人员参考文档 http://velocity.apache.org/engine/releases/v ...

  7. Scheme语言--简单介绍

    一年前事实上有时间看完SICP这本书,后来由于种种原因,一直没有继续再学.由于SICP中使用Scheme确实应用不多.在Java,C++的语言眼里,Scheme确实非常另类.现在MIT已经放弃了使用S ...

  8. Java语言的介绍

    1. 计算机语言 语言:沟通交流的方式 计算机语言:人与计算机之间的交流方式 java是一门计算机编程语言,也是意大利自行车品牌 软件工程师,java开发工程师 <--------------- ...

  9. REST建模语言RAML介绍

    原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com   RAML是什么?   RAML是一种简洁的RESTful API描述性语言,它基于 YAML和JSON这样的公 ...

随机推荐

  1. RESTful Web Services初探

    RESTful Web Services初探 作者:杜刚 近几年,RESTful Web Services渐渐开始流行,大量用于解决异构系统间的通信问题.很多网站和应用提供的API,都是基于RESTf ...

  2. This kind of launch is configured to open the Debug perspective when it suspends.

    This kind of launch is configured to open the Debug perspective when it suspends. 因为设置了断点才会弹出这个,不需要调 ...

  3. Bash脚本15分钟进阶指导

    首先声明这是网上摘来的.这里的技术技巧最初是来自谷歌的“Testing on the Toilet” (TOTT).这里是一个修订和扩增版本. 脚本安全 我的所有bash脚本都以下面几句为开场白: # ...

  4. 最简单的Github入门基础

    起因是小伙伴分享给我github上的一个FQ工具,让我看实现过程.于是,就由关键字"github"搜索开始. 一言之,是个开源的SVN.和CVS.SVN类似,但是,里面有千千万万程 ...

  5. Node入门(转)

    原文链接:http://www.nodebeginner.org/index-zh-cn.html Node入门 作者: Manuel Kiessling翻译: goddyzhao & Gra ...

  6. 微信支付之JSAPI开发第一篇-基本概念

    申请权限 具体步骤就不说了,进入微信支付商户平台进行申请认证,认证成功后在微信公众号后台会有个微信支付的菜单按钮,点击后会有如下的信息 配置 在进行微信支付开发之前,必须进行一些必要的配置,如果这些配 ...

  7. Python语法一

    前记,今天开始学习Python 参考 笨方法学习+Python(第三版) 因为有编程基础,所以入门不难,相比于以前学过的其它语言编程,Python当然也有它独特的语法格式. 1.安装Python 访问 ...

  8. java MAVEN 项目出现红叉

    pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w ...

  9. Gvim插件管理Vundle

    之前关于gvim的博客中提到的很多插件安装比较繁琐,这一篇来介绍一下gvim管理插件的插件--vundle的安装以及使用,让givm的插件安装更加的简单 首先给出vundle的git地址 https: ...

  10. smbclient提示NT_STATUS_INSUFFICIENT_RESOURCES

    Rhel6中使用smbclient命令打开windows共享文件夹,出现: Linux Samba protocol negotiation failed: NT_STATUS_INSUFFICIEN ...