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 ...
随机推荐
- 杂项:IntelliJ IDEA
ylbtech-杂项:IntelliJ IDEA 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 作者:ylbtech出处:http:/ ...
- linux更改用户名,域名(转载)
转自:http://huangro.iteye.com/blog/365975 1. 我们在root权限下,使用命令: usermod -l new_user_name old_user_name 即 ...
- bzoj 4785: [Zjoi2017]树状数组【树套树】
参考:https://www.cnblogs.com/ljh2000-jump/p/6686960.html 由于操作反过来了,所以显然树状数组维护后缀和,所以本来想查询(1,r)-(1,l-1),现 ...
- 百度地图API详细介绍
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <t ...
- 如何验证自己的网络是否支持ipv6
http://test-ipv6.com/进入得到自己的ipv6地址 然后命令行 ping 一下
- typedef struct和struct 的区别 用途
刚刚想到的,我们在用结构体的时候会遇到'->'和'.',这是什么情况呢? 不能混用的(c和c++不同语言对它们没有影响) 我说的不能混用的意思是'.'用于结构体指针的指向......而'-& ...
- clipboard.js 实现动态获取内容并复制到剪切板
使用clipboard.js分为以下几个步骤: 1.引入一个clipboard.js的文件: 2.新建一个clipboard对象: 3.点击按钮获取目标对象里面的内容,将其复制到剪切板. 注意:1.目 ...
- socket servlet webservice 区别及使用场景
原文地址: http://blog.csdn.net/sdjkjsdh/article/details/51569481 1. Socket:使用TCP/IP或者UDP协议在服务器与客户端之间进行传输 ...
- 【CSS】少年,你想拥有写轮眼么?
最近笔者在公司内部开展了一次CSS讲座,由于授课经验不太足,授课效果自我感觉并不太好,不过课中有一个笔者用CSS写的一个小效果,其中还是包含了蛮多CSS的常见知识点的,正好也有部分同学很感兴趣如何实现 ...
- 机器学习基础算法__python实现(基于numpy等基础库)
# 博客转自https://blog.csdn.net/weixin_39561100/article/details/80879211 主要是将<机器学习实战>中的算法实现一遍,后续会慢 ...