这个页面的结果是输出"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 *#
有关引用的所有参数都处理为字符串对象。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
在大多数情况下,我们将使用引用的简略符号,但在一些情况下,也需要拥戴哦形式引用符以便正确处理。 假定你正在纸片上构件一个句子,将使用$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) 是一个引用。形式符号常用在饮用咋模板中和文本直接邻近的地方。
假设$email 是定义了的(比如,具有值foo),但是你想输出 $email。可以有几种方法来做这个事情,不是最简单的是使用转义符。 ## The following line defines $email in this template: #set( $email = "foo" ) $email \$email \\$email \\\$email
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 方法解决了。(比如 $foo.Name 解决了到类 Foo的 getName() 示例方法的引用,但不能引用Foo的一个公共实例变量Name)。 3. 指令 因为指令(使用脚本来有效操控JAVA代码的输出)允许页面设计员真正专注于咱点的外观和内容设计,引用允许模板设计员为Web页面产生动态内容。
#if( $foo < 10 ) Go North #elseif( $foo == 10 ) Go East #elseif( $bar == 6 ) Go South #else Go West #end 在这个例子中,$foo 大于10,所以前面两个比较失败。接下来比较$bar 和6,结果为真,所以输出为Go South。 请注意在现在, Velocity的数值比较约束为整型—其他类型都将求值为false。 仅有一个例外是等于'==',这时Velocity 要求等号两边的对象具有相同的类型。 3.5. 关系和逻辑操作符 Velocity 使用等式操作符来决定两个变量间的关系。这里是一个简单的例子演示如何使用等式操作符: #set ($foo = "deoxyribonucleic acid") #set ($bar = "ribonucleic acid")
#if ($foo == $bar) In this case it's clear they aren't equivalent. So... #else They are not equivalent and this will be the output. #end Velocity 也具有逻辑AND, OR 和 NOT 操作符。更进一步的信息,请看VTL参考手册VTL Reference Guide 。下面是一些演示如何使用逻辑操作符的例子: ## logical AND
#if( $foo && $bar ) This AND that #end
例子中#if() 指令仅在$foo 和$bar 斗为真的时候才为真。如果$foo 为假,则表达式也为假;并且 $bar 将不被求值。如果 $foo 为真,Velocity 模板引擎将继续检查$bar;的值,如果 $bar 为真,则整个表达式为真。并且输出This AND that 。如果 $bar 为假,将没有输出因为整个表达式为假。 逻辑OR 的工作方式相同,唯一的例外是其中一个表达式要被求值,以便决定整个表达式是否为真。请看下面的例子:
## logical OR
#if( $foo || $bar ) This OR That #end 如果 $foo 为真,Velocity 模板引擎就不需要去察看$bar 的值,不管 $bar 是否为真,真个表达式都为真,因此输出This OR That 。如果 $foo 为假,$bar 就必须检查其值了。在这种情况下,如果$bar 也是为假,表达式将为假,没有任何输出。当然,如果$bar 为真,则真个表达式为真,输出This OR That。 对于逻辑NOT 操作符,只有一个操作数: ##logical NOT
#if( !$foo ) NOT that #end
这里,如果$foo 为真,!$foo 求值为假,没有输出。如果$foo 为假,!$foo 求值为真,输出NOT that 。请当心,不要和安静引用quiet reference $!foo 混淆它们是完全不同的。
循环计数变量的缺省名称是$velocityCount,在velocity.properties 配置文件中标明。默认情况下,该变量从1开始计数,但是可以在velocity.properties 文件中设为从0或者1开始。 下面是velocity.properties 文件中循环变量设置一节: # Default name of the loop counter # variable reference. directive.foreach.counter.name = velocityCount
# Default starting value of the loop # counter variable reference. directive.foreach.counter.initial.value = 1
就象 #include 指令,#parse 可以使用变量而不是一个实在的模板文件。#parse 引用的模板文件必须包含的TEMPLATE_ROOT指定的目录之下。和 #include 指令不一样, #parse 只有一个参数。 VTL 模板templates can have #parse statements referring to templates that in turn have #parse statements. By default set to 10, the parse_directive.maxdepth line of the velocity.properties allows users to customize maximum number of #parse referrals that can occur from a single template. (Note: If the parse_directive.maxdepth property is absent from the velocity.properties file, Velocity will set this default to 10.) Recursion is permitted, for example, if the template dofoo.vm contains the following lines: Count down. #set( $count = 8 ) #parse( "parsefoo.vm" ) All done with dofoo.vm!
It would reference the template parsefoo.vm, which might contain the following VTL: $count #set( $count = $count - 1 ) #if( $count > 0 ) #parse( "parsefoo.vm" ) #else All done with parsefoo.vm! #end
After "Count down." is displayed, Velocity passes through parsefoo.vm, counting down from 8. When the count reaches 0, it will display the "All done with parsefoo.vm!" message. At this point, Velocity will return to dofoo.vm and output the "All done with dofoo.vm!" message
1. 宏 #macro 脚本元素允许模板设计者在VTL 模板中定义重复的段。 Velocimacros 不管是在复杂还是简单的场合都非常有用。下面这个Velocimacro,仅用来节省击键和减少排版错误,介绍了一些Velocity宏的概念。 #macro( d )
2. 转义 VTL 指令 VTL 可以通过反斜杠("\")来进行转义,directives can be escaped with the backslash character in a manner similar to valid VTL references. ## #include( "a.txt" ) renders as #include( "a.txt" )
创建Web工程,使用eclipse ee创建maven web工程 1.右键项目,选择Project Facets,点击Convert to faceted from 2.更改Dynamic Web Module的Version为2.5.(3.0为Java7的,Tomcat6不支持). 如果提示错误,可能需要在Java Compiler设置Compiler compl
最近一直在看python的document,打算在基础方面重点看一下python的keyword、Build-in Function、Build-in Constants、Build-in Types、Build-in Exception这四个方面,其实在看的时候发现整个《The Python Standard Library》章节都是很不错的,其中描述了很多不错的主题。先把Build-in Fu
学习函数式编程
package base;
import java.text.DecimalFormat;
public class Main {
public static void main(String[] args) {
// Integer a = 4;
// Double aa = (double)a / 100000;
// Decimal
Java中的泛型的使用:1.普通的泛型使用
在使用类的时候后面的<>中的类型就是我们确定的类型。
public class MyClass1<T> {//此处定义的泛型是T
private T var;
public T getVar() {
return var;
}
public void setVa