Velocity(5)——#macro 指令

 1 #macro(formatIncreaseData $increase)
 2     #if(${product.onlineStatusFlag} ==‘0‘)
 3         --
 4     #elseif(!$increase || $increase=="")
 5         --
 6     #else
 7         #if($increase >= 0)
 8             #set($color = "increase-number")
 9         #elseif($increase < 0)
10             #set($color = "is-decrease")
11         #end
12         <span class="$!{color}">${NumberUtils.percentageFormat($!{increase})}</span>
13     #end
14 #end
 1 #macro(renderTheme $themeList)
 2     #if($themeList.size()>0)
 3         #foreach($renqi in $themeList)
 4             #set($themeSelected="")
 5             #set($closeIcon = "")
 6             #if($!{fundGroupId} == $renqi.id)
 7                 #set($themeSelected="cur")
 8                 #set($closeIcon = "<span class=‘closeIcon‘></span>")
 9             #end
10         <li><a class="theme-name $!{themeSelected}" data-sk="All-reMen" title="$!{renqi.memo}" href=" " data-identity="fundGroupId" data-val="$!{renqi.id}"><span  class="">$!{renqi.groupName}</span>
11             $!{closeIcon}
12         </a >
13         </li>
14         #end
15     #end

Velocity中的宏可以理解为函数的定义,在使用的时候,需要考虑到宏的作用域的问题。

1、外层的宏中的变量在内存的宏中可以访问

2、内层中的宏变量如果与外层的变量名冲突,如果有传值则取传入的值,如果没有传值,则取上层的宏中的值!

以上的例子中定义了名为:

formatIncreaseData 和 renderTheme 的函数

调用方式为:
1 #renderTheme($fundGroup.renqiList)
2 #renderTheme($fundGroup.zhutiList)

所以,velocity的宏使Velocity作为一个同步的模板引擎的功能达到最大化!

时间: 2024-10-28 19:26:30

Velocity(5)——#macro 指令的相关文章

Velocity(5)——#set指令

引用可以让模板设计者生成动态内容,而指令允许设计者真正的负责页面的展现和内容. 指令是以#开头,后面紧跟一个关键字,比如if,else,foreach等.而这个关键字,是可以被放在{}中间的.这是规范的写法,但是可能不好看. #set #set指令用于向一个变量或者属性赋值.其格式为 #set($foo="bar")或者#set($foo.bar=$test) . LHS必须是一个变量或者属性,RHS必须是以下7种类型之一:变量.属性.字符串字面值.数字字面值.方法.ArrayList

Velocity(8)——引入指令和#Stop指令

#Include和#Parse都是用于将本地文件引入当前文件的指令,而且被引入的文件必须位于TEMPLATE_ROOT.这两者之间有一些区别. #Include 被#Include引入的文件,其内容不会被Velocity引擎解析,所以这些文件应该是静态模板,即不含有VTL的模板.使用#Include()指令时,参数是被双引号括起来的文件名或者是表示文件名的变量.如果有多个文件,以逗号隔开即可.比如#Include("a.gif", "b.html", $file).

Velocity(6)——#if指令

下面是#If指令的一个简单而完整的示例: #if ($foo < 10) Go North #elseif ($foo == 10) Go East #else Go West#end 不能漏掉 #if指令用于判断某个条件是否为true.以上面的代码为例,当$foo < 10为true时,将会显示"Go North". 有时会看到这样一种写法:#if($foo) ... #end.这里充当判断条件的是一个变量$foo,它在两种情况下是true:一是$foo作为布尔值(Boo

Velocity(4)——引入指令和#Parse 指令

#Include和#Parse都是用于将本地文件引入当前文件的指令,而且被引入的文件必须位于TEMPLATE_ROOT.这两者之间有一些区别. #Include 被#Include引入的文件,其内容不会被Velocity引擎解析,所以这些文件应该是静态模板,即不含有VTL的模板.使用#Include()指令时,参数是被双引号括起来的文件名或者是表示文件名的变量.如果有多个文件,以逗号隔开即可.比如#Include("a.gif", "b.html", $file).

Velocity(7)——#foreach指令

首先是#foreach的简单示例: #foreach( $elem in $allElems) $elem</br> #end 上面这个例子中,$allElems可以是一个Vector,一个HashTable,一个数组. 在Velocity中,有一个变量$velocityCount用作循环计数,初始值是1.这个变量的名字和初始值是在velocity.properties文件里配置的. 下面是更多的几个例子: #set($nums=[-2 .. 2]) #foreach($i in $nums)

velocity自定义标签和指令

velocity本身支持自定义标签和指令的扩展, 在 Velocity 模板语言的语法中,以美元符 $ 开头的为变量的声明或者引用,而以井号 # 开头的语句则为 Velocity 的指令(Directive). velocity支持的指令有:#set,#foreach,#if #else #end,#parse,#include,#evaluate,#define,#macro, 在velocity的jar包中的directive.properties中定义了这些实现: [html] view

macro , nested , return指令

macro可以用于实现自定义指令,通过使用自定义指令,可以将一段模板片段定义成一个用户指令,使用macro指令的语法格式如下: < #macro name param1 param2 ... paramN> ... < #nested loopvar1, loopvar2, ..., loopvarN> ... < #return> ... < /#macro> 在上面的格式片段中,包含了如下几个部分: name:name属性指定的是该自定义指令的名字,使用

《Velocity java开发指南》中文版(下)转载

文章出自:http://sakyone.iteye.com/blog/524292 8.Application Attributes Application Attributes (应用程序属性)是和VelocityEngine 的运行时实例(Runtimeinstance)相关联的,名-值对(name-value pairs)格式的参数,可用来存运RuntimeInstance时的信息. 设计这个功能的目标是Velocity程序需要与应用层或用户定制部分(如日志,资源,装载器等)通信. The

Velocity工作原理解析和优化

在MVC开发模式下,View离不开模板引擎,在Java语言中模板引擎使用得最多是JSP.Velocity和FreeMarker,在MVC编程开发模式中,必不可少的一个部分是V的部分.V负责前端的页面展示,也就是负责生产最终的HTML,V部分通常会对应一个编码引擎,当前众多的MVC框架都已经可以将V部分独立开来,可以与众多的模板引擎集成. Velocity总体架构 从代码结构上看,Velocity主要分为app.context.runtime和一些辅助util几个部分. APP模块 其中app主要