`
snoopy7713
  • 浏览: 1123239 次
  • 性别: Icon_minigender_2
  • 来自: 火星郊区
博客专栏
Group-logo
OSGi
浏览量:0
社区版块
存档分类
最新评论

velocity学习心得

阅读更多
目录
1. 常用的模版技术 2
1.1. Velocity 2
1.2. Freemarker 2
2. 参考资料 2
2.1. Java Compiler Compiler 2
2.2. WebMacro 3
2.3. Turbine 3
2.4. 模版技术讨论网站 3
2.5. Spring in Action 3
3. Velocity 基本知识 3
3.1. Velocity 的工作原理 3
3.1.1. Velocity模板 4
3.1.2. Velocity上下文 4
3.1.3. 业务数据 4
3.1.4. Velocity引擎 4
4. Velocity 的常用语法 4
4.1. 变量 4
4.2. 变量赋值 5
4.3. 变量的正式引用符号 5
4.4. 没有定义的变量引用 5
4.5. 引用符号!(Quit引用符号) 5
4.6. 转义符号\ 6
4.7. 算术表达式 7
4.8. 字符串处理 7
4.9. #if / #elseif / #else 7
4.9.1. 简单的if语句使用 7
4.9.2. 嵌套if语句 8
4.10. 循环:foreach 8
4.11. 注释 8
4.12. 变量为对象 9
4.13. Velocity引用变量的方法 9
5. Velocity模版中使用中文变量值 9
6. Velocity和一般文件集成使用 9
7. Velocity模板文件嵌套使用 10
8. Velocity engine的单例和多例 10
8.1. 单例模式使用Velocity引擎 10
8.2. 多例模式使用Velocity引擎 10
8.2.1. 在模版引擎的初始化参数文件中设置相关参数 10
8.2.2. 模版本身的字符设置 10
8.2.3. Velocity类上的设置 10
9. 宏 11
9.1. 定义宏 11
9.2. 使用宏 11
9.3. 使用全局宏 11
9.3.1. 定义全局宏模版文件 11
9.3.2. 定义Velocity的引擎属性文件 11
9.3.3. 在实际的模版文件中引用全局宏 12
10. 在Velocity模版中访问java类的static field 12
11. 使用Velocity 处理Word文档 12
12.1. 定义word格式的Velocity模版 12
12.2. 使用Velocity产生相应内容的word文件 13
12. 使用Velocity 处理Excel文档 13
12.1. 定义Excel格式的Velocity模版 13
12.2. 使用Velocity产生相应内容的Excel文件 13
13. Velocity的上下文链(Context Chaining) 14
14. 使用velocity定制个性化页面 14

1. 常用的模版技术
1.1. Velocity
http://jakarta.apache.org/velocity/index.html
1.2. Freemarker
freemarker
http://www.freemarker.org/
freemarker plugin :
http://freemarker.sourceforge.net/eclipse.html
2. 参考资料
2.1. Java Compiler Compiler
https://javacc.dev.java.net/
Velocity uses a grammar-based parser generated by JavaCC (Java Compiler Compiler) using the JJTree extension to create an Abstract Syntax Tree.
2.2. WebMacro
http://www.webmacro.org
Velocity's design concept is borrowed from WebMacro. Those involved in the Velocity project acknowledge and appreciate the development and design work that went into the WebMacro project.
2.3. Turbine
http://jakarta.apache.org/turbine/index.html
Velocity is a Java-based template engine. It can be used as a standalone utility for generating source code, HTML, reports, or it can be combined with other systems to provide template services. Velocity will be tightly integrated with the Turbine web application framework. Velocity-Turbine provide a template service by which web applications may be developed according to a true MVC model.
2.4. 模版技术讨论网站
http://www.matrix.org.cn/topic.shtml?forumId=30
2.5. Spring in Action
参考书籍《Spring in Action》这本书
3. Velocity 基本知识
3.1. Velocity 的工作原理
最好你了解模版方法的设计模式的大致意思(你可以参阅下Gof的设计模式)。
参考
http://dev.yesky.com/325/2061825.shtml
3.1.1. Velocity模板
采用Velocity定义的文本文件,该文件采用Velocity语言定义模板文件。
3.1.2. Velocity上下文
是Velocity的一个容器,用于保存相关业务数据。
3.1.3. 业务数据
这里指需要应用到模板的数据
3.1.4. Velocity引擎
用户把业务数据放置到Velocity 上下文,然后Velocity引擎使用Velocity把上下文应用到模板,按照模板格式输出数据。
简单来说Velocity引擎从Velocity上下文获取相关数据,然后把Velocity模版的相关内容进行处理,输出到指定的对象中。
4. Velocity 的常用语法
VTL(Velocity Template Language)的常用语法
4.1. 变量
采用以$作为前缀来标识一个标量
Hello $foo World!
上面的$foo表示在模板中引用了一个名字为foo的变量
4.2. 变量赋值
#set( $foo = "Velocity" )
设置变量foo的值="Velocity"
4.3. 变量的正式引用符号
一般来说 VTL的变量以$作为开始分隔符号,结束符号一般是以回车符号或者空格符号,逗号等分开。
name :$username
name: $username,usersex:$sex
对于在紧接变量后有其他字符或者变量的情况下,采用正式的引用(分隔)符号来识别变量。
#set( $vice = "klepto" )
Jack is a ${vice}maniac.
4.4. 没有定义的变量引用
对于没有定义的变量引用,Velocity原样返回。
Hello $foox World!
如果在Velocity的上下文中没有定义该变量的值,那Velocity引擎将输出的内容还是为:
Hello $foox World!
4.5. 引用符号!(Quit引用符号)
参考 \velocitybasictest\template\VarExample1.vm
<input type=”text” value=”$email”>
如果初始时,$email没有值,所以文本框中会显示值$email,而更希望是空
白。下面是使用Quit引用符号的例子:
<input type="text" value="$!email">
当$email没有值时,Velocity会用空串替代$email。
4.6. 转义符号\
参考目录 \velocitybasictest\template\ VarExample1.vm
#set( $email = "foo" )
email is :$email
email is :\$email
4.7. 算术表达式
参考目录 \velocitybasictest\template\ExpressExample.vm
#set( $ foo = 1 )
#set( $value = $foo + 1 ) ## Addition
#set( $value = $bar - 1 ) ## Subtraction
#set( $value = $foo * $bar ) ## Multiplication
#set( $value = $foo / $bar ) ## Division
#set( $value = $foo % $bar ) ## Remainder
4.8. 字符串处理
参考目录 \velocitybasictest\template\StringExample.vm
字符串的串联,双引号中的引用会替换成相应的值
#set( $size = "Big" )
#set( $name = "Ben" )
#set($clock = "${size}Tall$name" )
The clock is $clock.
单引号,单引号中的引用原样输出
#set( $template = '$directoryRoot/$templateName’ )
4.9. #if / #elseif / #else
参考 \velocitybasictest\template\ IfExample.vm
4.9.1. 简单的if语句使用
#if( $foo )
Velocity!
#end
4.9.2. 嵌套if语句
## embed if
#if($foo)
variable foo =true
#if($foo2)
variable foo2 =true
#else
variable foo2 =false
#end

#if($foo3)
variable foo3 =true
#else
variable foo3 =false
#end
#end
4.10. 循环:foreach
参考 \velocitybasictest\template\ LoopExample.vm
$velocityCount是Velocity表示循环计数的内部变量,缺省开始值为1。
例子如下:
#foreach ( $product in $allProducts )
The $velocityCount is--- $product.name
#end

可以在#foreach指令中使用范围操作符[n..m],其中n和m必须是整型,例子如下:
#foreach( $bar in [2..-2] )
$bar
#end
4.11. 注释
以##作为标识来定以一个注释,好像java中的//符号
Hello $foo World! ## This text is not visible
多行注释(包括在#*和*#之间)好像java中的/* */注释符号
4.12. 变量为对象
Velocity模板中的变量为对象类型,可以采用$VTL标识符. VTL标识符方式引用对象的属性。
User address is :$customer.Address
4.13. Velocity引用变量的方法
Set user name :$user.setName(“www”)
User name now is :$user.getName()
5. Velocity模版中使用中文变量值
参考目录
velocitytest\velocitybasictest\src\gbk
参考
http://www.j2medev.com/Article/Clas...00607/2765.html
注意:
不允许在模版中使用中文变量
6. Velocity和一般文件集成使用
使用#include来包含文件到模板中
例如在指定模版中包含文件:
#include("FileInTemplateExample.txt")
7. Velocity模板文件嵌套使用
例如在指定模版中包含模版文件:
below is TemplateInTemplateExample2.vm" content
#parse("TemplateInTemplateExample2.vm")
8. Velocity engine的单例和多例
参考目录 velocitytest\velocitybasictest\src\velocityengineuse
8.1. 单例模式使用Velocity引擎
直接使用Velocity类进行初始化,然后使用Velocity类获得模版
8.2. 多例模式使用Velocity引擎
通过VelocityEngine类创建Velocity引擎和创建模板

8.2.1. 在模版引擎的初始化参数文件中设置相关参数
假设velocity.properties为初始化参数文件,在velocity.properties中分别指定二者的值:
input.encoding = GBK
output.encoding = GBK
8.2.2. 模版本身的字符设置
Template template = engine.getTemplate("news.vm","GBK");
8.2.3. Velocity类上的设置
org.apache.velocity.app.Velocity 类的以下方法:
public static Template getTemplate(String name, String encoding)
public static boolean mergeTemplate( String templateName, String encoding, Context context, Writer writer )
一般是上面的第一和第二组合使用,当然上面的第一和第三组合使用也可以
9. 宏
宏使用的方法:先定义宏,然后再使用宏
参考目录: velocitybasictest\src\macro\MacroUse
9.1. 定义宏
## define a macro.the name of the macro is myMacro
#macro(myMacro)
this is the first line of my Macro
this is the second line of my Macro
#end
9.2. 使用宏
## use my defining macro:myMacro
myMacro content is :
#myMacro()
9.3. 使用全局宏
9.3.1. 定义全局宏模版文件
9.3.2. 定义Velocity的引擎属性文件
在该属性文件中,指定全局宏模版文件的名字
9.3.3. 在实际的模版文件中引用全局宏
10. 在Velocity模版中访问java类的static field
参考org.apache.velocity.app.FieldMethodizer
参考目录 \velocitybasictest\src\staticfield
类staticfield.WdzFieldMethodizer继承了FieldMethodizer,可以让Velocity模板访问java对象的非私有属性的值,但是不能在模板中直接修改这些没有public读写方法的非私有属性的值。
目前是可以访问static field,如果需要直接访问private或者其他属性的字段,可以考虑继承FieldMethodizer,然后在对象放入到上下文之前先用FieldMethodizer的后代包装再放入。
不过FieldMethodizer没有定义父接口,需要自己定义FieldMethodizer的后代才可以达到上述目的,不是很爽。

11. 使用Velocity 处理Word文档
要求Office2003以上。
12.1. 定义word格式的Velocity模版
新建一个word文件,在文件里面定义Velocity需要替换的变量,采用类似 $VarName格式或者${VarName}格式定义Velocity变量。
保存word文件为XML格式,一般来说,需要把保存的XML文件确认其encoding="GBK"
注意:定义的Velocity变量名字不能是中文名,采用英文名字作为Velocity变量名字。
参考
velocityofficeuse\template\Word的velocity模版1.doc
velocityofficeuse\template\ Word的velocity模版1.xml
12.2. 使用Velocity产生相应内容的word文件
使用Velocity引擎为word格式的Velocity模板产生word内容文件。
参考
velocityofficeuse\Word的velocity模版生成文件1.xml
velocityofficeuse\src\wordusevelocity\WordVelocityUse1.java
12. 使用Velocity 处理Excel文档
要求Office2003以上。
12.1. 定义Excel格式的Velocity模版
新建一个Excel文件,在文件里面定义Velocity需要替换的变量,采用类似 $VarName格式或者${VarName}格式定义Velocity变量。
保存Excel文件为XML格式,一般来说,需要把保存的XML文件确认其encoding="GBK"
注意:定义的Velocity变量名字不能是中文名,采用英文名字作为Velocity变量名字。
参考
velocityofficeuse\template\Excel的velocity模版1.doc
velocityofficeuse\template\ Excel的velocity模版1.xml
12.2. 使用Velocity产生相应内容的Excel文件
使用Velocity引擎为word格式的Velocity模板产生Excel内容文件。
参考
velocityofficeuse\Excel的velocity模版生成文件1.xml
velocityofficeuse\src\wordusevelocity\ExcelVelocityUse1.java
13. Velocity的上下文链(Context Chaining)
采用责任链模式建立应用的Velocity上下文链.
参考 velocitytest\velocitybasictest\src\contextchaining
参考类
org.apache.velocity.VelocityContext
org.apache.velocity.context.AbstractContext
AbstractContext 类的以下方法:
public Object get(String key)
public abstract Object internalGet( String key );
VelocityContext先从自己内部中寻找当前key的值,如果找不到,到它嵌套的VelocityContext里面去寻找当前key的值。
具体责任链式的Velocity上下文创建方式参考VelocityContext类
14. 使用velocity定制个性化页面
使用velocity来使用户更好的浏览他们感兴趣的内容,个用户登陆时都拥有自己的个性化页面。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics