文档章节

velocity基础语法(部分)

阿信sxq
 阿信sxq
发布于 2015/12/12 22:03
字数 1009
阅读 226
收藏 1
点赞 0
评论 0

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

阿信sxq

粉丝 213
博文 80
码字总数 70640
作品 1
成都
后端工程师
velocity模板扩展--vtree

vtree全称应该是:“velocity tree syntax” velocity:Java常用的一种模板渲染语法,或者说是模板引擎。 vtree除了对velocity语法树进行遍历执行渲染以外,还提供了xtool工具类,处理veloc...

summer ⋅ 2013/10/22 ⋅ 1

TinyTemplate模板引擎火热出炉,正式开源了~~~

涉水模板引擎领域,纯属不小心。 在此对以下人员表示强烈感谢与致敬: @sub jetbrick作者 @sept @webit webit作者 @罗格林 rythm作者 @闲.大赋 beetl作者 以及许许多多虽然没有列出来,但是在...

悠悠然然 ⋅ 2014/06/18 ⋅ 29

velocity语法树解析--syntaxTree

velocity语法树解析,可以解析出一棵树,配合vtree可以完成velocity语法解析和渲染,分开来发布,因为语法树解析目前是写成lua模块,而vtree是纯lua代码。两者非常独立,如果作为语法学习研究...

summer ⋅ 2013/10/24 ⋅ 0

Akrogen

Akrogen是一个以模型/模板为基础的代码生成工具,发布在MPL1.1/GPL/LGPL授权之下。 主要特征Akrogen主要具有以下特征: - 使用Velocity,Freemarker,XSL等常用模板引擎语言 - 因为使用模板来...

匿名 ⋅ 2008/09/16 ⋅ 0

【转】一篇Velocity入门级的文章

这是一篇Velocity入门级的文章,虽然很简单,但确实能够说明Velocity的工作原理,值得一读。 虽然大多 Velocity 的应用都是基于 Servlet 的网页制作, 但是为了说明 Velocity 的使用,我决定采...

mj4738 ⋅ 2012/01/29 ⋅ 0

velocity模板库的实际使用

之前一直使用的jsp,后来看到有说使用模板会更好的说法,正好比较闲,就自学了一下velocity,把之前用jsp做视图的spring mvc项目转换为了用velocity来做视图,下面就一些使用中的问题做一下归...

阿信sxq ⋅ 2016/07/12 ⋅ 0

改造Velocity模板引擎让$[!]{}输出默认进行html转义,并增加$#{}语法支持不转义输出

一直以来在项目中使用Apache Velocity模板引擎作为视图层输出,为了解决XSS漏洞,需要对输出到页面的内容进行HTML转义,我一般采用2种方式实现: 使用过滤器 Filter,在其中进行 HttpServle...

山哥 ⋅ 2014/11/04 ⋅ 0

使用 Velocity 实现客户端和服务器端模板

Velocity 是一种通用的、开放源代码的模板解决方案,可以在报告生成/数据转换应用程序中独立使用,也可以在 MVC 模型框架中作为视图组件。本文中,Sing Li 介绍了 Velocity,并说明如何将其模...

红薯 ⋅ 2008/10/05 ⋅ 1

JavaScript 模板引擎--Velocity.js

Velocity.js 是velocity模板语法的javascript实现。Velocity 是基于Java的模板引擎,广泛应用在阿里集 体各个子公司。Velocity模板适用于大量模板使用的场景,支持复杂的逻辑运算,包含 基本...

红薯 ⋅ 2014/04/30 ⋅ 1

Apache Velocity实现模板化

1.参考文献 http://www.cnblogs.com/zhuboxingzbx/articles/1225103.html http://www.cnblogs.com/amboyna/archive/2008/06/19/1225105.html 2.概述 2.1.Velocity模板引擎 模板引擎的设计思想......

嗯哼9925 ⋅ 2017/12/20 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

HiSDP —— 高效的C++软件开发平台

目前阿里集团每天有近1000PB的数据是通过LogAgent采集的,为了让LogAgent做到资源占用节省和高效采集,背后是基于HiSDP去构建的。 缘由 当决定采用C++编程语言去开发一个软件时,紧接着所面临...

阿里云云栖社区 ⋅ 25分钟前 ⋅ 0

zookeeper-3.4.12 下载与安装教程

一、zookeeper下载地址 http://mirrors.hust.edu.cn/apache/zookeeper/ 二、启动教程 把压缩包放在指定目录下 第三: 进入 conf文件夹底下 zoo_sample.cfg 文件名改成 zoo.cfg 第四步: 进入b...

泉天下 ⋅ 27分钟前 ⋅ 0

Oracle 中文日期转换

SELECT TO_date('2011年11月11日', 'yy"年"mm"月"dd"日"') FROM DUAL; 1. Oracle无法识别中文格式,所以添加双引号。 2. 后面的格式是指字符串在转换前的格式,而不是指转换后的格式。...

江戸川 ⋅ 28分钟前 ⋅ 0

MySell:API Spring Boot

起步 类目 商品 订单

BeanHo ⋅ 30分钟前 ⋅ 0

Spring方法拦截器MethodInterceptor

参考资料 1、Spring方法拦截器MethodInterceptor 2、Sharding JDBC源码分析-JdbcMethodInvocation类的作用

哎小艾 ⋅ 34分钟前 ⋅ 0

正则表达式

元字符 元字符,又叫字符集,就是用一些特殊符号表示特定种类的字符或位置。 匹配字符 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d 匹配数字 匹配...

wangchen1999 ⋅ 34分钟前 ⋅ 0

数据库数据导入Elasticsearch案例分享

基于bboss持久层和bboss elasticsearch客户端实现数据库数据导入es案例分享(支持各种数据库和各种es版本) 1.案例对应的源码 https://gitee.com/bboss/bboss-elastic/blob/master/bboss-el...

bboss ⋅ 35分钟前 ⋅ 0

动手---sbt(2)

参考 https://blog.csdn.net/leishangwen/article/details/46225587 建立一个chisel_max目录,文件内容如后面所述,现在开始执行命令: joe@joe-Aspire-Z3730:/media/sdb4/download/scala$ c......

whoisliang ⋅ 41分钟前 ⋅ 0

纯js实现最简单的文件上传(后台使用MultipartFile)

<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>XMLHttpRequest上传文件</title> <script type="text/javascript"> //图片上传 var xhr......

孟飞阳 ⋅ 46分钟前 ⋅ 0

iOS宇宙大战游戏、调试工具、各种动画、AR相册、相机图片编辑等源码

iOS精选源码 日期时间选择器,swift Space Battle 宇宙大战 SpriteKit游戏源码 LLDebugTool - 便捷的IOS调试工具(新增截屏功能) 相机扫描or长按识别二维码、FMDB、键盘动态高度、定位等 动画...

sunnyaigd ⋅ 47分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部