模板工具(1)——Velocity

是一种模板工具,完成模板和动态数据的合并。

作用

1.      进行web开发

2.     自动的Email生成。。

3.    XML转换。Velocity提供了一个叫AnakiaAnt任务,这个任务能读入一个XML文件并将之转换成Velocity模版。一个常见的应用是将保存为通用"xdoc"格式的文件转换成HTML文档。

4.     它可以从模板(template)产生SQLPostScriptXML,它也可以被当作一个独立工具来产生源代码和报告,或者作为其他系统的集成组件使用。Velocity也可以为、web开发架构提供模板服务(template service)。

简单示例

Java程序

Velocity.init();
VelocityContext context = new VelocityContext();
//向context 中放入要在模板中用到的数据对象
context.put( "name", new String("Velocity") );
context.put(“words”, new ArrayList());
Template  template = Velocity.getTemplate("mytemplate.vm");


 

模板文件 *.vm

       这是 ${name}

VTL

         VTL中有俩种,#$分别代表函数和变量。

       仅仅把VTL做为插入信息到文本的工具,不要再VTL中改变对象,尽量不要使用IteratorEnumeration(ListSet代替)

组成:

1.       变量和对象,如 ${person.name}  ${i}

2.       控制语句  #if #elseif #else  #foreach  #break

3.       Directive

         #include  包含文件,不使用velocity解析

         #parse 包含文件,并使用velocity解析

         #evaluate 执行字符串,类似于js中的eval

         #define,类似于c中的使用

                   #define( $hello ) Hello $who

         #end #set( $who = "World!") $hello ## displays Hello World!

         #macro  定义 Velocimacro (可重复的VTL模板的代码段),类似于函数

4.       注释

   ##  或者 #*   *#

5.       不对内容解析: #[[  ]]#

参考网址: http://velocity.apache.org/engine/devel/vtl-reference-guide.html

调用函数

vm模板可以直接执行对 java对象的调用,如下

         #set($myarr=[“a”,”b”,”c”]);

         $foo.bar($myarr);

         当在vm中使用 set将对象加入context后,模板合并输出后,java对象可以访问这些对象。

 可以通过函数来获取数据,但不如果函数修改了对象状态,则不建议在模板中调用

事件处理

         预定义了三种事件处理接口:NullSetEventHandler  ReferenceInsertionEventHandler   MethodExceptionEventHandler

Resource Loader

         定义从什么地方加载资源。有FileResourceLoader  JarResourceLoader  ClassPathResourceLoader  DataSourceResourceLoaderWebappResourceLoader(在webapps中用的较多,属于VelocityTools

velocity配置

velocity.properties文件中对velocity的一些参数进行配置。默认的配置信息在:/src/java/org/apache/velocity/runtime/defaults/velocity.

配置属性如下:

日志相关:
	Rntime.log  指定日志路径和文件名 
	Runtime.log.error.stacktrace=false
	Runtime.log.warn.stacktrace=false  指定日志的显示级别
	Runtime.log.invalid.references=true   引用无效时输出日志
编码方式:
	Input.encoding  指定模板的编码方式
	Output.encoding  输出流的编码方式
Foreach循环
	Directive.foreach.counter.name  循环计数的名称
	Directive.foreach.counter.initial.value  计数的起始值
#include和#parse
	Directive.include.output.errormsg.start
	Directive.include.output.errormsg.end   定义错误消息标记
资源加载
	webapp.resource.loader.path=/WEB-INF/mytemplates/
宏
	就是类似于函数定义

多实例和单实例

         最简单的情况,在程序中只有一个context

         可以使用VelociytEngine组织多个cotnext

         context chaining:连接多个独立的velocitycontext,以便在template中使用

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值