velocity(vm)模板引擎基本语法
for循环
#foreach($acc in $!{param.tools})
#set($count = $count + 1)
<li custom-data="$!{acc.orgcode}" cube-data="$!{acc.owner}" node-data="$!{acc.balance}">
<a href="javascript:void(0);">$!{acc.accountName} 可用余额 $!{acc.balance}元</a>
</li>
#end if条件语句
#if(${supportWorkerPay})
#end
form表单提交
<form autocomplete="off" id="pursePayForm" action="/purse/pursePay.htm" method="post">
<input type="hidden" name="orderId" value="$!{param.orderId}"/>
<input type="hidden" name="amount" value="$!{param.amount}"/>
<input type="hidden" name="encryptContent" value="$!{param.encryptContent}"/>
<input type="hidden" name="encryptPwd" value=""/>
<input type="hidden" name="validateCode" value=""/>
</form> $("#pursePayForm").submit();
嵌套vm #parse(parsefoo.vm)
velocity三种reference
变量:对java对象的一种字符串化表示,返回值调用了java的toString()方法的结果。
方法:调用的是对象的某个方法,该方法必须是public的,返回值也是toString(),方法的参数也必须为String的。
属性:除了访问java的类属性外,等价于get..()方法。
基本符号
1、“#”来标识velocity的脚本语句。
2、“$”来标识一个对象(或者变量)。
3、“{}”用来标识velocity变量。
4、“!”用来强制把不存在的变量显示为空白。
5、用双引号还是单引号表示,默认“”,可以在stringliterals.interpolate=false改变默认处理方式
基本语法
1、 变量
(1) 变量定义
#($name="hello")
#($templateName = "index.vm")
#set($template = "$directoryRoot/$templateName")
#template
(2)变量规范
${name},也可以写成$name
但一般情况下使用${name}
注意:当引用属性的时候不能加{}
(3)变量赋值
$name ="hello"
左侧:
为变量或者属性的引用。
右侧:
变量引用、字面字符串、属性引用、方法引用、字面数字、数组列表。
#set($monkey = $bill) ##变量引用
#set( $monkey.Friend = "monica" ) ## 字符串引用
#set($monkey.Blame = $spindoctory.weave($web) ## 方法引用
#set($monkey.Number = 123) ## 数字引用
#set($monkey.Say = ["Not",$my,"fault"] ##数组列表
ps:
1、右值是null,则左侧不会被赋值,会保留原来的值。
2、velocity 模板中未被定义的将被认为是一个字符串。
#set($foo ="gibbous")
$moon = $foo
输出结果为$moon=gibbous
3、velocity模板中不会解释为对象的实例变量。
例如
$foo.getBar() 等同于$foo.Bar;
$data.getUser("jon") 等同于 $data.User("jon");
data.getRequest().getServerName()等同于$data.Request.ServerName等同于$(data.Request.ServerName)
2、循环
#foreach($element in $list)
This is $element
$velocityCount
#end
例如:
#set($list=["pine","oak","maple"])
#foreach($element in $list)
$velocityCount
This is $element.<br>
#end
输出结果为:
$list 可以为Vector、Hashtable、Array。分配给$element 的值是一个java对象,并且可以通过变量被引用。
例如
#foreach($key in $list.keySet)
Key: $key--->value: $list.get($key) <br>
#end
Velocity 还提供了循环次数的方法,$velocityCouont变量的名字是Velocity默认的名字,表示循环到第几次了。
例如
#foreach($foo in [1,2,3,4,5])
$foo
#end
<br>
#foreach($bar in [2,1,0,-1,-2])
$bar
#end
<br>
#set($arr=[0,1])
#foreach($i in $arr)
$i
#end
输出结果如下:
3、条件语句
#if(condition)
#elseif(condition)
#else
#end
例如:
#set($arr=["jiayou","jiayou2","jiayou3"])
#foreach($element in $arr )
#if($velocityCount==1)
<div>jiayou</div>
#elseif($velocityCount==2)
<div>jiayou2</div>
#else
<div>jiayou3</div>
#end
#end
输出结果:
4、语句嵌套
#foreach($element in $list)
#foreach($element in $list)
this is $element .$velocity <br>inner<br>
#end
this is $element.$velocity <br>out<br>
#end
5、注释
单行注释:##this is single
多行注释:#* .........*#
文档格式:#**.............*#
6、关系和逻辑操作符
&& == || !
#if($foo && $bar)
<strong> This AND that</strong>
#end
7、velocity中的宏
Velocity中的宏我们可以理解为函数。
①宏的定义
#macro(宏的名称 $参数1 $参数2 …)
语句体(即函数体)
#end
②宏的调用
#宏的名称($参数1 $参数2 …)
说明:参数之间用空格隔开。
8、#stop
停止执行模板引擎并返回,应用于debug很有帮助。
9、$include和#parse
#include和#parse的作用都是引入本地文件,为了安全,被进入的文件只能在Template_root目录下。
这两个引入区别:
1)#include可以引入多个文件。例如:#include("one.gif","two.txt","three.html")
#parse只能引入指定的单个对象。例如:#parse("layout/index.vm")
2)#include引入的文件内容不会被velocity模板引擎解析。
#parse引入的文件内容,将解析其中的velocity并交给模板,相当于把引入的文件内容copy到文件中。
3)#parse是可以递归调用的。
例如:
调用者
dofoo.vm中代码:
count down.<br>
#set($count= 8)
#parse(parsefoo.vm)
<br>all done with diao yong parsefoo.vm.
parsefoo.vm中代码:
$count
$set($count = $count - 1)
#if($count>0)<br>
#parse("parsefoo.vm") ##自己调用自己
#else
<br>递归调用结束
#end
输出结果:
注:
使用#parse来嵌套另一个vm页面时,变量共享问题,如:
a.vm 中嵌套了b.vm
a.vm中使用了变量$param;
b.vm里可直接使用$param.
但其中一个定义了,则使用它自己定义的那个同名变量。
10、转义字符
当变量被定义的时候,两个\\代表一个\,如果未被定义,则按照原样输出。
例如:
11、内置对象
velocity内置了一些对象,在vm中可以直接调用。例如
$request、$response、$session,使用$msg内的消息工具访问struts的国际化资源,达到简便实现国际化方法。
12、数组访问
数组要改成list等其他类容器方式来包装。
velocity(vm)模板引擎基本语法的更多相关文章
- 前端 velocity(.vm)模板里写ajax出现解析异常
异常信息:Caused by: org.apache.velocity.exception.ParseErrorException: Encountered "{" at dist ...
- nodeJs学习-10 模板引擎 ejs语法案例
ejs语法案例 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t ...
- 使用 Velocity 模板引擎快速生成代码(zhuan)
http://www.ibm.com/developerworks/cn/java/j-lo-velocity1/ ****************************************** ...
- 转 如何使用velocity模板引擎开发网站
基于 Java 的网站开发,很多人都采用 JSP 作为前端网页制作的技术,尤其在是国内.这种技术通常有一些问题,我试想一下我们是怎样开发网站的,通常有几种方法: 1:功能确定后,由美工设计网页的UI( ...
- 使用Velocity 模板引擎快速生成代码
Velocity 模板引擎介绍 在现今的软件开发过程中,软件开发人员将更多的精力投入在了重复的相似劳动中.特别是在如今特别流行的MVC架构模式中,软件各个层次的功能更加独立,同时代码的相似度也更加高. ...
- 基于Velocity开发自己的模板引擎
Velocity是一个基于java的模板引擎(template engine).它同意不论什么人只简单的使用模板语言(template language)来引用由java代码定义的对象. 当Veloc ...
- 调研js模板引擎
js模板引擎越来越多的得到应用,如今已经出现了几十种js模板引擎,国内各大互联网公司也都开发了自己的js模板引擎(淘宝的kissy template,腾讯的artTemplate,百度的baiduTe ...
- js模板引擎介绍搜集
js模板引擎越来越多的得到应用,如今已经出现了几十种js模板引擎,国内各大互联网公司也都开发了自己的js模板引擎(淘宝的kissy template,腾讯的artTemplate,百度的baiduTe ...
- 浅析js模板引擎
js模板引擎越来越多的得到应用,如今已经出现了几十种js模板引擎,国内各大互联网公司也都开发了自己的js模板引擎(淘宝的kissy template,腾讯的artTemplate,百度的baiduTe ...
随机推荐
- BZOJ_3448_[Usaco2014 Feb]Auto-complete_Trie树
BZOJ_3448_[Usaco2014 Feb]Auto-complete_Trie Description Bessie the cow has a new cell phone and enjo ...
- saltstack源码-启动1
决定看salt的源码了.干脆就从最基本的看起来,先看它的启动过程开始第一步用/etc/init.d/salt-master start 启动找到那个文件,发现有3种启动方式,suse,debian,c ...
- webpack 4.0 相关
Webpack 4.0发布了!! https://www.jianshu.com/p/3a13f1b37300 webpack详解 https://juejin.im/post/5aa3d2056fb ...
- UVa 12712 && UVaLive 6653 Pattern Locker (排列组合)
题意:给定 一个n * n 的宫格,就是图案解锁,然后问你在区间 [l, r] 内的所有的个数进行组合,有多少种. 析:本来以为是数位DP,后来仔细一想是排列组合,因为怎么组合都行,不用考虑实际要考虑 ...
- ES6躬行记(23)——Promise的静态方法和应用
一.静态方法 Promise有四个静态方法,分别是resolve().reject().all()和race(),本节将着重分析这几个方法的功能和特点. 1)Promise.resolve() 此方法 ...
- UVA1437 String painter
传送门 我们先考虑从一个空白串变成\(B\),这样的话用区间dp,区间dp,设\(f[l][r]\)表示区间\((l,r)\)的最小次数,当\(l==r\)时为\(1\),当\(s[l]==s[r]\ ...
- spring boot+mybatis报错mapper无法注入
搭建spring boot项目时启动出现的问题,先来看异常片段: Error starting ApplicationContext. To display the conditions report ...
- ibatais.net 连接 mysql 最全配置写法
1.安装环境: 1. vs2013 (vs开发工具) 2. mysql 5.7.10.0 (安装的mysql 数据库版本) https://dev.mysql.com/doc/ ...
- win7下硬盘安装Windows
win7下硬盘安装Windows: 1.下载 Windows 7 ISO镜像,用虚拟光驱拷贝至非C盘(如d:\win7)2.开机按F8 - 修复系统 - 选择最后一项命令修复 - 在命令框输入 d:\ ...
- NOIp2013 车站分级 【拓扑排序】By cellur925
题目传送门 我们注意到,题目中说:如果这趟车次停靠了火车站 x,则始发站.终点站之间所有级别大于等于火车站x的都必须停靠.有阶级关系,满满的拓扑排序氛围.但是,如果我们按大于等于的关系连,等于的情况就 ...