velocity基础语法(部分)
velocity基础语法(部分)
阿信sxq 发表于2年前
velocity基础语法(部分)
  • 发表于 2年前
  • 阅读 206
  • 收藏 1
  • 点赞 0
  • 评论 0

腾讯云 十分钟定制你的第一个小程序>>>   

摘要: 自己整理的velocity的基础语法,不是全部

velocity是一个java的页面模板框架,Apache基金会出品,自从2010年出了1.7版本之后,就没有出新版本了,svn里面有一个2.0的分支,但是下载下来根本没有办法编译过,会有各种奇怪的maven依赖问题,据传已经把人调过去开发freemarker了。

其他的不说了,不更新,想好一点就是足够稳定了,不需要更新了。

下面是我在自学的时候整理的部分语法,贴在这里,大家来指正一下。:)

##关键字

所有的关键字都是以 # 开头的,而所有的变量则是以 $ 开头

##变量

定义变量使用#set( $iAm = "good!" ),而#set( $hhh = "good! $iAm" )则会读取 $ 对应的变量的值,将值填充到对应的位置

在找不到对应的变量的时候会将其当成普通字符串进行处理

当时用单引号将 $xxx 引起来的时候不会对其进行变量替换

在使用变量的时候可以使用$name${name}的形式,但是对于同时定义了name和names的情况,$names就没办法正确识别了, 就只能用${names}的形式。 对于复杂的对象类型变量,使用${person.name}可以访问得到name属性的值,其实这是通过对get方法的访问得到的, 也就是${person.name}等同于${person.getName()}

###变量赋值

变量是弱类型的,可以有如下的赋值操作:

#set($foo = $bar)
#set($foo =“hello”)
#set($foo.name = $bar.name)
#set($foo.name = $bar.getName($arg))
#set($foo = 123)
#set($foo = [“foo”,$bar])

需要注意,在使用#set($foo = $bar)之后,这两个变量就指向了同一个对象了,对一个变量的对象进行操作,会影响到另外一个变量

##循环

#foreach($element in $list)
 This is $element
 $velocityCount
#end

循环过程中会将当前对象赋值给element,这个变量名可以修改,对应好即可, 循环过程中的当前序号保存在velocityCount变量中,需要注意,序号从1开始每次加1

使用$foreach.count也可以获取当前循环次数(从1开始),使用$foreach.index得到的序号是从0开始的, 使用$foreach.hasNext更可以获取是否是最后一次循环, 使用$foreach.first$foreach.last可以分别获取开始和结束的元素

在循环体中使用#break可中止循环

###遍历List和Map

遍历Map

#foreach($param in ${paramValues.keySet()})
    <tr>
        <th>$param</th>
        <td>${paramValues.get($param)}</td>
    </tr>
#end

遍历List

#foreach($sal in ${salerList})
    $sal.name
#end

##条件判断

#if(condition)
...
#elseif(condition)
…
#else
…
#end

表达式使用boolean类型的结果即可,velocity提供的关系操作符有与、或、非,对应的符号是&&||

$foo && $bar

##宏定义

宏类似于函数,定义和调用的语法:

#macro(macroName arg1 arg2 …)
...
#end
#macroName(arg1 arg2 …)

各个参数之间使用空格隔开,不是逗号

#macro(sayHello $name)
hello $name
#end
#sayHello("velocity")

##包含指令

包含指令可以使用 #parse 和 #include 来实现,两者的区别是,

  • #parse会将包含的文件中的内容当作类似源代码来处理,文件内容会进行velocity模板方面的解析;
  • #include则会仅仅将文件内容当作普通文本进行处理,原封不动放进结果中

对于文件foo.vm:

#set($name ="velocity")

那么#parse和#include的用法分别是:

#parse("foo.vm")
$name
#include("foo.vm")

结果是

velocity
#set($name ="velocity")

include当包含的参数有多个时,使用逗号分隔开;parse时能接受一个参数;所有被包含的文件都只能在模板文件的根目录

##注释

注释使用3种形式

1 ## 这是注释
2 #*

  跨行注释

  *#
3 #**

  这是带有doc功能的注释

  *#

##中止

使用#break或者#stop可以中止执行

##字面值

使用#literal()#end包裹的代码不会进行处理,直接输出字面值

#literal()

#foreach ($woogie in $boogie)

nothing will happen to $woogie

#end

#end

会直接输出


#foreach ($woogie in $boogie)

nothing will happen to $woogie

#end

共有 人打赏支持
阿信sxq
粉丝 200
博文 79
码字总数 69997
作品 1
×
阿信sxq
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: