- 浏览: 194082 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
官人与夫人:
我的也是,看完特地登陆来,赞一个!
SpringMVC JPA 事务,数据库保存操作没有异常但数据保存不成功 -
悲伤的小脑:
这个少了 种情况吧。就是一个时间段完全包含另外一个时间段,这应 ...
java 判断两个时间段是否有交集 -
nilm61:
vip3652204732 写道为什么会报NULL错误,路径是 ...
java调用ffmpeg获取视频信息函数代码 -
vip3652204732:
为什么会报NULL错误,
路径是对的啊。
68行报NULL错误 ...
java调用ffmpeg获取视频信息函数代码 -
liuxuejin:
好!真需要
java调用ffmpeg获取视频信息函数代码
1.
关于
Velocity
用户指南旨在帮助页面设计者和内容提供者了解
Velocity
和其简单而又强大的脚本语言(
Velocity Template Language (VTL)
)。本指南中有很多示例展示了用
Velocity
来讲动态内容嵌入到网站之中,但是所有的
VTL examples
都同演示用于所有的页面和模版。
感谢选择
Velocity!
2.
什么是
Velocity?
Velocity
是一个基于
Java
的模版引擎。它允许
web
页面设计者引用
JAVA
代码预定义的方法。
Web
设计者可以根据
MVC
模式和
JAVA
程序员并行工作,这意味着
Web
设计者可以单独专注于设计良好的站点,而程序员则可单独专注于编写底层代码。
Velocity
将
Java
代码从
web
页面中分离出来,使站点在长时间运行后仍然具有很好的可维护性,并提供了一个除
JSP
和
PHP
之外的可行的被选方案。
Velocity
可用来从模板产生
web
页面,
SQL, PostScript
以及其他输出。他也可用于一个独立的程序以产生源代码和报告,或者作为其它系统的一个集成组件。这个项目完成后,
Velocity
将为
Turbine
web
应用程序框架提供模板服务。
Velocity+Turbine
方案提供的模板服务将允许
web
应用按真正的
mvc
模式进行开发。
3.
Velocity
可以做什么
?
3.1.
Mud Store
示例
假设你是一个专门销售泥浆(
MUD
)的在线商店的页面设计者。我们称他为
"The Online Mud Store"
。生意很好。客户订购各种各样的类型和数量的泥浆。他们使用他们的用户名和密码登陆到商店中来,就可以浏览他们的订货和购买其他东西。现在,赤土陶泥正在促销,这是一种很常用的泥巴。一少部分顾客很有规律的购买一种亮红土
Bright Red Mud
,这也是促销产品,但是不太常用,因此被移到页面的边缘。所有顾客的信息都在数据库中被跟踪,因此有一天问题出现了:
为什么不使用
Velocity
来定位目标客户,这些客户对某种类型的产品特别感兴趣?
Velocity
使针对访问者个性的
WEB
页面客户化(个性化)非常容易。作为一个在线泥巴商店的站点设计者,以想在客户以登陆进展点后就看到它们想看的页面。
你遇到你公司的软件工程师,每个人都认为
$customer
将保持当前登陆进入的客户信息,而
$mudsOnSpecial
将士当前所有促销的泥巴。
$flogger
对象包含有助于促销的方法。对于当前的任务,让我们仅关注这三个问题。记住,你不需要担心软件工程师如何从数据库中取得顾客信息,但你必须知道他们可以。这样可以使你专注于你的工作而软件工程师则忙于他们自己的工作。
你可以在你的页面中嵌入如下的
VTL
语句:
<HTML>
<BODY>
Hello $customer.Name!
<table>
#foreach( $mud in $mudsOnSpecial )
#if ( $customer.hasPurchased($mud) )
<tr>
<td>
$flogger.getPromo( $mud )
</td>
</tr>
#end
#end
</table>
|
foreach
语
句的细节将进一步细说,但重要的是这个短小的脚本居然可以在你的站点上运行。当有一个倾向于亮红土的顾客登陆进来时,亮红土正在促销,这就是这个顾客所看
到的,并且促销显示非常显著。如果另外一个长期购买赤陶土的顾客登陆进来,赤陶土促销的提示信息则应该在前面中间位置。
Velocity
是非常灵活的,受限的只是你的创造力。
写在
VTL
参考文档中的是其他
Velocity
元素,他们一起给你很强大的能力和灵活性以创建很好的站点。待你更加了解这些元素,就可以开始释放
Velocity
的强大动力。
4.
Velocity
模板语言
(VTL):
介绍
Velocity
模板语言
(VTL)
旨在为
Web
页面结合动态内容提供最容易、简单和简洁的方法。即使有一点或者没有编程经验的页面设计者也可以很快能为页面提供动态内容。
VTL
使用引用(
references
)来将动态内容嵌入
web
页面,每个变量就是某一个类型的引用。变量实际上是一个可以调用定义在
java
代码中的内容的引用,或者它可以从页面内的
VTL
语句得出自身的值。下面是一个例子,说明可以嵌入到
HTML
文档中的
VTL
语句。
#set( $a = "Velocity" )
|
这个
VTL
语句,就像所有的
VTL
语句一样,以
#
字符开始,并跟着一个指令
set
。
当一个在线访问这请求页面时,
Velocity
模伴引擎在页面内搜索所有
#
字符,然后决定是哪一个标记了
VTL
语句的开始,哪个标记不需要
VTL
做什么动作。
#
字符后面紧跟一个指令
set
.
。
set
指令使用一个括在括号内的表达式
---
一个等式将一个值指派给一个变量。变量在等号的左边而值在等号的右边。
在上面的示例中,变量是
$a
值是
Velocity
。
这个变量就象其他引用一样,以一个
$
字符开始。值通常在引号之中,对
Velocity
来说一般没有类型冲突的问题,因为只有字符串
(
基于文本的信息
)
可以传递给变量。
下面的主要规则可能有助于理解
Velocity
是如何工作的:引用以
$
开头用于取得什么东西,而指令以
#
开始用于做什么事情。
在上面的例子中,
#set
用于将一个值指派给一个变量。而变量
$a
则可以用来在模板中输出
"Velocity"
。
5.
Hello Velocity World!
一旦一个值被赋给一个变量,便可以在
HTML
中随处引用它。在下面的示例中,先给变量
$foo
赋值然后引用它。
<html>
<body>
#set( $foo = "Velocity" )
Hello $foo World!
</body>
<html>
|
这个页面的结果是输出
"Hello Velocity World!"
。
为了使包含
VTL
指令的语句具有可读性,我们鼓励每个
VTL
语句在一个新行开始,虽然并不一定要这样做。
set
将随后深入解释。
6.
注释
可以用注释加入描述性文本,他们并不在模板引擎中输出。注释可以有助于你的记忆或者想其他人解释你的
VTL
语句正在做什么。
## This is a single line comment.
|
单行注释以
##
开始,并在本行结束。如果需要加入多行注释,并不需要加入很多的单行注释。多行注释,以
#*
开始并以
*#
结束可以处理这种情况。
This is text that is outside the multi-line comment.
Online visitors can see it.
#*
Thus begins a multi-line comment. Online visitors won't
see this text because the Velocity Templating Engine will
ignore it.
*#
Here is text outside the multi-line comment; it is visible.
|
下面事一些例子说明单行注释和多行注释如何工作。
This text is visible. ## This text is not.
This text is visible.
This text is visible. #* This text, as part of a multi-line comment,
is not visible. This text is not visible; it is also part of the
multi-line comment. This text still not visible. *# This text is outside
the comment, so it is visible.
## This text is not visible.
|
还有第三种注释,
VTL
注释块,可以用来存储诸如文档作者、版本信息等。
#**
This is a VTL comment block and
may be used to store such information
as the document author and versioning
information:
@author
@version 5
*#
|
7.
引用
VTL
中有三种类型的引用:变量,属性和方法。作为使用
VTL
的设计者,你和你的工程师必须在饮用的特定命名上取得一致,以便在你的模板中正确的使用他们。
有关引用的所有参数都处理为字符串对象。
Everything coming to and from a reference is treated as a String object.
假如有一个对象表示
$foo (
比如说是整型对象
)
,
Velocity
将调用其
toString()
方法来将此对象转换为一个字符串。
7.1.
变量
Variables
变量的简略标记是有一个前导
"$"
字符后跟一个
VTL
标识符(
Identifier.
)组成。一个
VTL
标识符必须以一个字母开始
(a .. z
或
A .. Z)
。剩下的字符将由以下类型的字符组成:
字母
(a .. z, A .. Z)
数字
(0 .. 9)
连字符
("-")
下划线
("_")
下面是一些有效的变量引用
:
$foo
$mudSlinger
$mud-slinger
$mud_slinger
$mudSlinger1
|
当
VTL
引用一个变量时,比如
$foo
,变量可以从模板的
set
指令取得值,也可以从
Java
代码中取得。例如,如果
Java
变量
$foo
在模板被请求的时候具有值
bar
,则
bar
将替换页面中的所有
$foo
的实例。或者,如果包含下面的语句:
#set( $foo = "bar" )
|
紧跟指令后的所有
$foo
的实例的输出将会一样值。
7.2.
属性
VTL 引用的第二种元素是属性,而属性具有独特的格式。属性的简略标记识前导符 $ 后跟一个 VTL 标识符,在后跟一个点号 (".") 最后又是一个 VTL 标识符。这是一些有效的示例:
$customer.Address
$purchase.Total
|
请看第一个例子,
$customer.Address
.
。他有两种意思。
它可以意味着,查询由
customer
标是的哈希表并按关键字
Address
返回值。但是
$customer.Address
也可能引用一个方法(下述,
$customer.Address
可能是
$customer.getAddress()
.
的缩写。当一个页面被请求时,
Velocity
将决定这两种可能到底是哪一个,然后返回相应的值。
7.3.
方法
方法在
JAVA
代码中定义,并作一些有用的事情,比如运行一个计算器或者作出一个决定。方法是实际上也是引用,由前导符
"$"
后跟一个
VTL
标识符,后跟一个
VTL
方法体(
Method Body
)。
VTL
方法体由一个
VTL
标识符后跟一个左括号,再跟可选的参数列表,最后是右括号。下面是一些有效的方法示例:
$customer.getAddress()
$purchase.getTotal()
$page.setTitle( "My Home Page" )
$person.setAttributes( ["Strange", "Weird", "Excited"] )
|
前面两个例子
-- $customer.getAddress()
和
$purchase.getTotal()
–
看起来有点象上面属性一节中所用的样子,
$customer.Address
和
$purchase.Total
.
。如果你想这些例子在某些方面相关,那你就对了。
VTL
属性可以为
VTL
方法用作简略标记。属性
$customer.Address
具有和方法
$customer.getAddress()
完全一样的效果。属性和方法的主要不同点是方法中可以添加参数列表。
简略标记可以用在下面的方法中:
sun.getPlanets()
$annelid.getDirt()
$album.getPhoto()
|
我们或许希望方法可以为我们放回属于太阳系的行星的名字,喂养我们的蚯蚓,或者从相册中返回一张照片。下面只有长的那个标记是可以工作的方法:
$sun.getPlanet( ["Earth", "Mars", "Neptune"] )
##
不能将参数列表传递给
$sun.Planets
$sisyphus.pushRock()
## Velocity
假定我意思是
$sisyphus.getRock()
$book.setTitle( "Homage to Catalonia" )
##
不能传递一个参数列表
|
7.4.
形式引用符
Formal Reference Notation
引用的简略符号如上所述,但是另外还有一种引用的形式符号,示例如下:
${mudSlinger}
${customer.Address}
${purchase.getTotal()}
|
在大多数情况下,我们将使用引用的简略符号,但在一些情况下,也需要拥戴哦形式引用符以便正确处理。
假定你正在纸片上构件一个句子,将使用
$vice
作为句子中名词的词根。我们的目标是允许人们选择词根,然后产生以下两种结果之一:
"Jack is a pyromaniac."
或者
"Jack is a kleptomaniac."
。
在这种情况下,使用简略符号是不太充分的。考虑到下面的例子:
Jack is a $vicemaniac.
|
这里有个不确定性,
Velocity
假定
$vicemaniac
,(而不是
$vice
)
是一个你想要使用的标识符。
找不到
$vicemaniac
的值,他将返回
$vicemaniac
。使用形式符号便可解决这个问题:
Jack is a ${vice}maniac
|
现在
Velocity
知道
$vice
(而不是
$vicemaniac
)
是一个引用。形式符号常用在饮用咋模板中和文本直接邻近的地方。
7.5.
安静引用符
Quiet Reference Notation
当
Velocity
遇到一个位定义的引用时,其通常行为是输出这个引用的映像。比如,假设下面的引用出现在模板中的一部分:
<input type="text" name="email" value="$email"/>
|
当表单初次装入时,变量引用
$email
无值,你宁愿是一个空白域而不是具有值
"$email"
。使用安静引用符可以绕过
Velocity
的常规行为,在
VTL
中不用
$email
而是用
$!email
符号。
所以,上面的例子将会看起来像下面的样子:
<input type="text" name="email" value="$!email"/>
|
现在,当表单初次装入时,
$email
仍然没有值,但是将输出空字符串而不是
"$email"
。
形式和安静引用符可以一起使用,如下所示:
<input type="text" name="email" value="$!{email}"/>
|
1.
取得语义
Getting literal
VTL
特别的字符,比如
$
和
#
,
来做这个工作,因此在模板中使用这些自负的时候必须格外小心。本节讲述
$
的转义。
1.1.
货币
我们写下句子
"I bought a 4 lb. sack of potatoes at the farmer's market for only $2.50!"
,这并没有什么问题。但如前所述,
VTL
标识符总是以大写或是小写字母开始,所以
$2.50
在引用中将不能出错。
1.2.
转义有效的
VTL
引用
问题将会出现,因为
Velocity
将有一个潜在的冲突。转义特殊字符是处理
VTL
模板种特殊字符的最好的办法,者可以用一个反斜线来进行。
foo
$email
foo
$email
|
如果
Velocity
在
VTL
模板中遇到一个
$email
引用,他将在上下文中查找相应的值。这里,输出将是
foo
,因为
$email
是定义了的。如果
$email
未定义,输出将是
$email
。
假设
$email
是定义了的(比如,具有值
foo)
,但是你想输出
$email
。可以有几种方法来做这个事情,不是最简单的是使用转义符。
## The following line defines $email in this template:
#set( $email = "foo" )
$email
$email
\$email
\$email
|
将输出是
foo
$email
foo
$email
|
注意:
绑定在
$
的左边。从做绑定原则使
\$email
被解释为
\$email
。
和上面例子比较下面的例子,这里
$email
未定义。
$email
$email
\$email
\$email
|
输出
$email
$email
\$email
\$email
|
注意,
Velocity
处理定义和未定义的引用是不同的。下面一个
set
指令将
$foo
设为值
gibbous.
。
#set( $foo = "gibbous" )
$moon = $foo
|
输出将是
$moon = gibbous
--
这里
$moon
作为字面输出,因为他并没有定义。而
gibbous
将在
$foo
的位置输出。
我们也可以转义
VTL
指令,这将在指令一节祥述。
2.
Case Substitution
现在你大致了解了引用,可以在模板中使用它们了。
Velocity
采用了很多
JAVA
原理的优点,模板设计人员会发现非常容易使用。例如:
$foo
$foo.getBar()
## is the same as
$foo.Bar
$data.getUser("jon")
## is the same as
$data.User("jon")
$data.getRequest().getServerName()
## is the same as
$data.Request.ServerName
## is the same as
${data.Request.ServerName}
|
这个例子显示了引用的一些其他用法。
Velocity
借鉴了
Java
的自省和组件
bean
特征,来解决引用名在上下文中作为对象和对象方法的问题。可以在你的模板的任何地方插入引用和求值。
Velocity,
建模在
Sun Microsystems
定义的
BEAN
规范之上,是大小写敏感的;开发者努力捕捉和纠正可能出现的用户错误。当方法
getFoo()
在模板中通过
$bar.foo
引用时,
Velocity
首先尝试
$getfoo
。如果失败,他会再尝试
$getFoo
。类似地,当一个模板引用到
$bar.Foo
,
Velocity
将尝试
$getFoo()
先,然后尝试
getfoo()
。
注意:
模板中引用示例变量的问题仍然没有解决。
只有引用等价于
JavaBean
的
getter/setter
方法解决了。
发表评论
-
Liferay中的Portlet事件通信
2013-12-31 09:46 770Liferay中的Portlet事件通信在有的项目开发中是需 ... -
Resources for Liferay Developers
2013-06-21 22:04 844The following are useful re ... -
liferay webservice 使用
2012-12-18 14:57 17881.自定义实体向外提供webservice接口的步骤 ... -
Liferay 验证码动态刷新
2012-07-23 19:11 13771.使用liferay标签生成 验证码的url < ... -
liferay6.1 启用logj4j.properties定义日志
2012-07-02 14:57 1325在编译好的环境下 即tomcat/webapp/ROOT/WE ... -
liferay 一个实例对应多个域名
2012-06-14 15:00 988在 社区 组织 的管理页面 中有个设置 liferay6 ... -
liferay6.1 环境搭建遇到点问题
2012-06-13 18:07 1085执行 ant all 出现问题 The enviro ... -
liferay 页面的portlet:defineObjects 标签
2012-06-11 21:28 1134<defineObjects> 标记的作用: ... -
liferay6.1sdk目录认识
2012-06-11 21:00 1008iferay SDK有如下的目录结 ... -
liferay 未了解的领域
2012-06-07 14:20 05.2中通过SharePoint协议与MS Office整合 ... -
mark liferay 表结构分析
2012-04-26 16:22 1345liferay中每个page(layout)的界面顺序是通过l ... -
几个liferay整合
2012-04-18 09:51 0Liferay integration with LDAP ... -
liferay theme中添加portlet实例及几个theme中使用变量
2012-02-29 20:09 8781、 在theme中直接加入上面的标签就可以把指定的por ... -
liferay4.3笔记之整合CAS server进行单点登录(SSO)
2011-04-14 10:04 1134Lieferay和web项目中整合Li ... -
Liferay 5.2.3: custom URLs formats
2011-04-14 09:29 715Liferay SEO capabilities s ... -
liferay加载过程详解 转
2011-03-31 10:12 1917当用户在浏览器地址栏上输入http://localhost:8 ... -
自定义页面布局Template转
2011-03-31 09:54 1089一、编写模板文件 我们将该页面风格名称定义为1_2_ ...
相关推荐
### Velocity模板语言介绍 #### 一、Velocity简介 Velocity是一种基于Java的模板引擎(template engine),它使得非技术背景的人员能够轻松地使用一种简洁的模板语言来引用由Java代码所定义的对象。这种特性使得...
Velocity的出现提供了一种替代方案,它的模板语言(VM模板)更加简洁,更适合于视图层的开发。VM模板允许开发者使用类似于HTML的标记来插入动态内容,而实际的Java代码则被封装在#set、#if、#foreach等指令中,这样...
Velocity模板技术语法详细介绍,包括很详细的示例代码 1.变量………………………………………………………………………………1 2.循环………………………………………………………………………………2 3.条件语句...
Velocity模板语言(Velocity Template Language,简称VTL)是Apache软件基金会的Velocity项目中的一部分,它是一种用于生成动态网页内容的模板引擎。Velocity以其简洁、易读的语法,为Java开发者提供了一种高效的...
这个文件使用Velocity模板语言编写,用于定义页面结构和动态内容的展示方式。以下是对`portal_normal.vm`中关键部分的详细解析: 1. `<!DOCTYPE html>`:这是HTML5的声明,确保浏览器按照HTML5标准解析页面。 2. `...
Velocity 模板语言(VTL)是一种基于文本的模板语言,用于生成动态内容。VTL 语法简单易学,易于掌握。VTL 主要包括以下要素: * 变量:在 VTL 中,变量用于存储和显示数据。 * 指令:VTL 提供了多种指令,例如 if...
2. **Liferay中Velocity theme页面显示的一个重要类(TemplateProcessor.java)**:该文档可能深入讨论了Liferay使用Velocity模板语言处理页面的过程。TemplateProcessor是 Velocity模板引擎的关键组件,它解析模板...
* Velocity模板引擎技术需要学习Velocity模板语言和Velocity模板引擎的使用方法。 * Velocity模板引擎技术需要配置Velocity模板引擎和Java代码的集成。 Velocity模板引擎技术是Java Web开发中的一种重要技术,旨在...
SpringBoot集成Velocity代码生成模板是现代Java开发中的一个重要工具,它极大地提高了开发效率,尤其是在处理大量数据表映射到业务层代码时。Spring Boot作为一款轻量级的框架,简化了初始化和配置过程,而Velocity...
** Velocity模板语言简介** Velocity是Apache软件基金会的一个开源项目,它是一种...通过学习这本《Velocity模板使用指南中文版》,你将全面了解Velocity模板语言的使用,从而在项目开发中更高效地实现动态内容生成。
首先,Velocity的基本原理是通过一种简单的模板语言(Velocity Template Language,VTL)来分离内容和展示逻辑。开发者可以编写模板文件,其中包含变量和控制结构,然后在运行时通过Velocity引擎将这些模板与数据源...
Velocity的目标是使开发者能够用简单的模板语言来控制页面的布局和格式,同时将复杂的逻辑处理交给后台Java代码。这样做的好处在于,模板设计师和程序员可以各自专注于自己的工作,提高了开发效率和代码可维护性。 ...
Velocity模板语言(VTL)提供了一种简单易用的方式来合并动态内容到页面中。VTL使用“引用”(references)来嵌套动态内容,其中变量是最常见的引用类型。变量能够指向Java代码中定义的对象,或者从当前页面的VTL...
1. 灵活的模板设计:Velocity 模板语言提供了灵活的模板设计,可以根据实际需要设计不同的模板结构和样式。 2. 高效的数据插入:Velocity 模板语言可以高效地将数据插入模板中,生成最终的文档。 3.跨语言支持:...
Velocity 是一种基于 JAVA 的模板引擎,开发人员使用简单的模板语言就可以快速开发显示层,它使得显示层与程序代码分离。在 Struts2 框架中,Velocity 模板引擎可以与 Struts2 集成,实现了显示层与程序代码的分离。...
Velocity的工作原理基于模板语言和Java对象的结合。在模板中,开发者可以使用特定的指令(如#set、#if、#foreach)来控制流程,并使用$符号来引用Java对象的属性。当Velocity引擎处理模板时,它会将这些指令和变量...
Velocity模板实例 Velocity模板实例 Velocity模板实例 Velocity模板实例