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 ...
随机推荐
- django 初试
/************************************************************************************** * django 初试 ...
- AutoIT: 对文件系统的菜单进行操作,有专门的语句WinMenuSelectItem
对文件系统的菜单进行操作,有专门的语句WinMenuSelectItem: Run("notepad.exe") WinWaitActive("[CLASS:Notepa ...
- 使用Python操作Redis应用场景
1. 安装pyredis 首先安装pip 1 2 3 4 5 6 7 8 <SHELL># apt-get install python-pip ...... <SHELL> ...
- WEB开发框架系列教程 (一)快速创建解决方案
执行<华东信息辅助开发工具> 程序 打开程序界面如下图 输入用户名.密码进行登录 如果暂时还没有用户名和密码,点击注册提供机器码给管理员进行注册. 管理员QQ:93346562 下图是:点 ...
- MFC project for a non-Unicode character set is deprecated
error MSB8031: Building an MFC project for a non-Unicode character set is deprecated. You must chang ...
- 关于PHP的框架
使用PHP框架有优点也有缺点,优点是避免重复劳动.简化很多操作.方便团队项目开发及维护,框架已经帮助你完成了很多工作,业务层主要侧重于业务功能的开发,缺点是由于调用框架对系统性能会有一点影响,因为框架 ...
- CCF2016.4 - B题
思路:创建两个bool数组来模拟下落过程,一个存放面板状态,一个存放下落的格子.检测格子和面板对应位置是否同时为True,如果是则有冲突,不能继续下落,否则增加行号.为了统一处理,我们把面板最下面加一 ...
- 使用vmware12安装Ubuntu 遇到的两个问题和解决
1.need the x86-64 cpu,but only detected the xxx cpu. 这是因为bios中的virtual function 是 disabled,改为enabled ...
- 大数据技术之_25_手机APP信息统计系统项目_01_APP 数据生成模块 + 数据收集模块 + 数据处理模块框架搭建 + 业务需求处理 + 数据展示模块 +项目总结 + 问题总结
一 项目概述1.1 角色1.2 业务术语1.3 项目效果展示二 项目需求三 项目概要3.1 项目技术架构3.2 项目目录结构3.3 项目技术选型3.4 项目整体集群规划3.5 创建项目工程四 APP ...
- centos安装PHP扩展(bcmath)
Centos下搭完Mysql+Apache+PHP后,发现有些网页打开是空白的.将php.ini里面的参数 error_reporting = E_ALL,display_errors = On,di ...