Velocity 的自定义指令

Velocity 的指令类型简介

在 Velocity 的指令定义上,有两种指令类型分别是行指令和块指令。行指令例如 #set($name= ” Winter Lau ” ) 赋值指令,只有一行,中间没有任何的代码;而块指令例如循环指令 #foreach($idx in [1..20]) $idx #end,块指令须要用 #end 来结束。在 Velocity 自带的指令中块指令包括有:#if #elseif #foreach #define 和 #macro 这几个指令,除此以外都是行指令。数据库

编写自定义的 Velocity 指令

Velocity 容许您对指令系统进行扩展,在 Velocity 引擎初始化的时候会加载系统内置指令和用户的自定义指令。系统的内置指令已经在 Velocity 的 Jar 包中的 directive.properties 文件中定义,不建议直接修改该文件。而自定义的指令要求用户在 velocity.properties 文件中定义的,例如:userdirective=net.oschina.toolbox.CacheDirective。若是是多个自定义指令则使用逗号隔开。apache

全部的自定义指令要求扩展 org.apache.velocity.runtime.directive.Directive 这个类。为了更加形象直观的表现 Velocity 自定义指令的优势,接下来咱们将以一个实际的应用场景进行讲解。缓存

在该应用场景中,全部的页面请求直接指向 vm 文件,中间没通过任何的控制器。数据是经过 Velocity 的 toolbox 直接读取并显示在页面上。若是数据是来自数据库的,并且访问量很是大的时候,咱们就须要对这些数据进行缓存以便快速响应用户请求和下降系统负载。一种方法是直接在 toolbox 的读取数据的方法中进行数据的缓存;另一种就是咱们接下来要介绍的,经过编写自定义的缓存指令来缓存页面上的某个 HTML 片断。spa

首先咱们定义一个这样的块指令:#cache( “ CacheRegion ” , ” Key ” ) ,其中第一个参数为缓存区域、第二个参数为对应缓存数据的键值。该指令自动将包含在指令内部的脚本执行后的结构缓存起来,当第一次请求时检查缓存中是否存在此 HTML 片断数据,若是存在就直接输出到页面,不然执行块指令中的脚本,执行后的结果输出到页面同时保存到缓存中以便下次使用。使用方法以下所示:code

相关文章
相关标签/搜索