velocity基本语法
一、基本语法 1、"#"用于识别Velocity该脚本语句,这包括#set、#if 、#else、#end、#foreach、#end、#iinclude、#parse、#macro等一下。
例如:
#if($info.imgs)
<img src="$info.imgs" border=0>
#else
<img src="noPhoto.jpg">
#end 2、"$"用来标识一个对象(或理解为变量);如
如:$i、$msg、$TagUtil.options(...)等。 3、"{}"用来明白标识Velocity变量;
比方在页面中。页面中有一个$someonename,此时,Velocity将把someonename作为变量名,若我们程序是想在someone这个变量的后面紧接着显示name字符。则上面的标签应该改成${someone}name。 4、"!"用来强制把不存在的变量显示为空白。
如当页面中包括$msg,假设msg对象有值,将显示msg的值,假设不存在msg对象同,则在页面中将显示$msg字符。这是我们不希望的。为了把不存在的变量或变量值为null的对象显示为空白,则仅仅须要在变量名前加一个“!”号就可以。
如:$!msg
二 我们看到,全部界面模板中归纳起来仅仅有以下四种简单模板脚本语句就可以实现:
1、$!obj 直接返回对象结果。
如:在html标签中显示java对象msg的值。<p>$!msg</p>
在html标签中显示经过HtmlUtil对象处理过后的msg对象的值 <p>$!HtmlUtil.doSomething($!msg)</p>
2、#if($!obj) #else #end 推断语句
如:在EasyJWeb各种开源应用中。我们常常看到的用于弹出提示信息msg的样例。
#if($msg)
<script>
alert('$!msg');
</script>
#end
上面的脚本表示当对象msg对象存在时,输出<script>等后面的内容。
3、#foreach( $info in $list) $info.someList #end 循环读取集合list中的对象,并作对应的处理。
如:EasyJF开源论坛系统中论(0.3)坛首页显示热门主题的html界面模板脚本:
#foreach( $info in $hotList1)
<a href="/bbsdoc.ejf?easyJWebCommand=show&&cid=$!info.cid" target="_blank">$!info.title</a><br>
#end
上面的脚本表示循环遍历hotList1集合中的对象,并输出对象的相关内容。 4、#macro(macroName)#end 脚本函数(宏)调用。不推荐在界面模板中大量使用。
如:在使用EasyJWeb Tools高速生成的添删改查演示样例中,能够点击列表的标题栏进行升降排序显示,这是我们在EasyJWeb应用中常常看到的一个排序状态显示的模板内容。 函数(宏)定义。一般放在最前面
#macro(orderPic $type)
#if ($orderField.equals($type))
<img src="http://images.cnblogs.com/ico/${orderType}.gif">
#end
#end
详细的调用如:<font color="#FFFFFF">头衔#orderPic("title")</font>
5、包括文件#inclue("模板文件名称")或#parse("模板文件名称")
主要用于处理具有同样内容的页面,比方每一个站点的顶部或尾部内容。 用法。能够參考EasyJF开源Blog及EasyJF开源论坛中的应用!
如:#parse("/blog/top.html")或#include("/blog/top.html")
parse与include的差别在于,若包括的文件里有Velocity脚本标签,将会进一步解析。而include将原样显示。
三、关于#set的使用
在万不得已的时候。不要在页面视图自己声明Velocity脚本变量,也就是尽量少使用#set。有时候我们须要在页面中显示序号。而程序对象中又没有包括这个序号属性同,能够自定义。如在一个循环体系中,例如以下所看到的:
#set ($i=0)
#foreach($info in $list)
序号:$i
#set($i=$i+1)
#end
四、Velocity脚本语法摘要
1、声明:#set ($var=XXX)
左边能够是下面的内容
Variable reference
String literal
Property reference
Method reference
Number literal #set ($i=1)
ArrayList #set ($arr=["yt1","t2"])
算术运算符 2、凝视:
单行## XXX
多行#* xxx
xxxx
xxxxxxxxxxxx*# References 引用的类型
3、变量 Variables
以 "$" 开头。第一个字符必须为字母。 character followed by a VTL Identifier. (a .. z or A .. Z).
变量能够包括的字符有下面内容:
alphabetic (a .. z, A .. Z)
numeric (0 .. 9)
hyphen ("-")
underscore ("_") 4、Properties
$Identifier.Identifier
$user.name
hashtable user中的的name值.相似:user.get("name") 5、Methods
object user.getName() = $user.getName() 6、Formal Reference Notation
用{}把变量名跟字符串分开 如
#set ($user="csy"}
${user}name
返回csyname $username
$!username
$与$!的差别
当找不到username的时候,$username返回字符串"$username",而$!username返回空字符串"" 7、双引號 与 引號
#set ($var="helo")
test"$var" 返回testhello
test'$var' 返回test'$var'
能够通过设置 stringliterals.interpolate=false改变默认处理方式 8、条件语句
#if( $foo )
<strong>Velocity!</strong>
#end
#if($foo)
#elseif()
#else
#end
当$foo为null或为Boolean对象的false值运行. 9、逻辑运算符:== && || ! 10、循环语句#foreach($var in $arrays ) // 集合包括下面三种Vector, a Hashtable or an Array
#end
#foreach( $product in $allProducts )
<li>$product</li>
#end #foreach( $key in $allProducts.keySet() )
<li>Key: $key -> Value: $allProducts.get($key)</li>
#end #foreach( $customer in $customerList )
<tr><td>$velocityCount</td><td>$customer.Name</td></tr>
#end 11、velocityCount变量在配置文件里定义
# Default name of the loop counter
# variable reference.
directive.foreach.counter.name = velocityCount
# Default starting value of the loop
# counter variable reference.
directive.foreach.counter.initial.value = 1 12、包括文件
#include( "one.gif","two.txt","three.htm" ) 13、Parse导入脚本
#parse("me.vm" ) 14、#stop 停止运行并返回 15、定义宏Velocimacros ,相当于函数 支持包括功能
#macro( d )
<tr><td></td></tr>
#end
调用
#d() 16、带參数的宏
#macro( tablerows $color $somelist )
#foreach( $something in $somelist )
<tr><td bgcolor=$color>$something</td></tr>
#end
#end 17、Range Operator
#foreach( $foo in [1..5] )
总结:
在EasyJWeb中,我们提供了四条主要的模板脚本语句。基本上就能满足全部应用模板的要求。 这四条模板语句非常easy,能够直接由界面设计人员来加入。在当前非常多EasyJWeb的应用实践中,我们看到,全部界面模板中归纳起来仅仅有以下四种简单模板脚本语句就可以实现:
1、$!obj 直接返回对象结果。 如:在html标签中显示java对象msg的值。<p>$!msg</p>
在html标签中显示经过HtmlUtil对象处理过后的msg对象的值.<p>$!HtmlUtil.doSomething($!msg)</p>
2、#if($!obj) #else #end 推断语句
如:在EasyJWeb各种开源应用中。我们常常看到的用于弹出提示信息msg的样例。 #if($msg)
<script>
alert('$!msg');
</script>
#end
上面的脚本表示当对象msg对象存在时。输出<script>等后面的内容。
3、#foreach( $info in $list) $info.something #end 循环读取集合list中的对象。并作对应的处理。 如:EasyJF开源论坛系统中论坛首页显示热门主题的html界面模板脚本
#foreach( $info in $hotList1)
<a href="/bbsdoc.ejf?easyJWebCommand=show&&cid=$!info.cid" target="_blank">$!info.title</a><br>
#end
上面的脚本表示循环遍历hotList1集合中的对象,并输出对象的相关内容。 4、#macro(macroName)#end 脚本函数(宏)调用,不推荐在界面模板中大量使用。
如:在EasyJF简易订销管等系统中常常看到的一个排序状态显示的模板内容。
函数(宏)定义,一般放在最前面
#macro(orderPic $type)
#if ($orderField.equals($type))
<img src="http://images.cnblogs.com/ico/${orderType}.gif">
#end
#end
详细的调用如:<font color="#FFFFFF">头衔#orderPic("title")</font>
版权声明:本文博主原创文章。博客,未经同意不得转载。
velocity基本语法的更多相关文章
- EL与Velocity基本语法总结:
El(expression language): 基本语法点: $与{}搭配使用是常态取值 . 与[]的区别,后者可以取特殊值:- .等 支持一些基本的逻辑运算: && || > ...
- Velocity 基本语法
Velocity 基本语法 Velocity 是一个基于 Java 的模板引擎框架,提供的模板语言可以使用在 Java 中定义的对象和变量上.Velocity 是 Apache 基金会的项目,开发的目 ...
- Velocity常用语法详解
果然公司用的东西跟平时学的东西不太一样,我们公司前台页面并不是我们熟悉的.html或者.jsp文件,而是很多人不知道的 .vm文件,其实只要我们理解了jsp文件,vm文件也就是一些基本语法不同而已. ...
- Velocity模板语法说明
Velocity基本语法 "#"用来标识Velocity的关键字,包括#set.#if .#else.#end.#foreach.#end.#include.#parse.#mac ...
- Velocity初探小结--velocity使用语法详解
做java开发的朋友一般对JSP是比较熟悉的,大部分人第一次学习开发View层都是使用JSP来进行页面渲染的,我们都知道JSP是可以嵌入java代码的,在远古时代,java程序员甚至在一个jsp页面上 ...
- Velocity简单语法及VelocityHelper封装
1.简单替换##这是注释Wellcome ${userName}! Now:$date 2.申明变量:#set( $iAmVariable = "good!" )Welcome $ ...
- Velocity 语法(转)
一.基本语法 1."#"用来标识Velocity的脚本语句,包括#set.#if .#else.#end.#foreach.#end.#iinclude.#parse.#macro ...
- Velocity模板引擎语法
Velocity 模板引擎介绍 Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java ...
- 【转】Velocity 语法
一.基本语法 1."#"用来标识Velocity的脚本语句,包括#set.#if .#else.#end.#foreach.#end.#iinclude.#parse.#macro ...
随机推荐
- Windows phone 8 学习笔记(3) 通信
原文:Windows phone 8 学习笔记(3) 通信 Windows phone 8 可利用的数据通信方式比较广泛,在硬件支持的前提下,我们可以利用WiFi.蓝牙.临近感应等多种方式.数据交互一 ...
- 数据库连接技术之OLE DB
之前的博客介绍了ODBC和JDBC.这次简单的介绍一下OLE DB.ODBC的总结不知道是没贴到博客上还是不在这个博客上,我再找找,没有的话我再补充到时候.好了.開始吧. 回想 之前呢介绍过了ODBC ...
- mysql-定时调用存储过程
mysql定时调用存储过程,对表数据集表结构进行备份 存储过程实例: BEGIN DECLARE tname varchar(64); set @tname = CONCAT('RENAME TABL ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (初级)
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (初级) 企业库加密应用程序模块提供了2种方 ...
- STM32W108无线传感器网络嵌入式uCOS-II的移植及实时环境监測
基于STM32W108无线开发板,将ucos-ii v2.86内核移植到其上,并加入用户任务.实现对温湿度.超声波.声音.光敏等传感器的控制及实时数据採集. 14.1开发环境说明 硬件:STM32W1 ...
- STM32F103 TIM1输出PWM设置
//TIM1 分频 #define TIM1_DIV1 (1-1) #define TIM1_DIV2 (2-1) #define TIM1_DIV4 (4-1) #define TIM1_DIV8 ...
- .NET垃圾回收笔记
名词 垃圾收集目标 ephemeral GC 发生在Gen 0 和Gen 1 的垃圾收集 Full GC 发生Gen 2 及以上的Gen与LOH的垃圾收集 垃圾收集模式 工作站模式 GC直接发生在内存 ...
- 关于扩展IP地址空间的几个方案的探讨
摘 要:在IP地址紧缺的背景下,IPv6.NAPT.SuIP几种解决方案应运而生.分析.比较几种方案后,可知SuIP是最佳方案. 关键词:IPv6:NAPT:SuIP:IP地址空间扩展 The In ...
- python 凸包(经纬度) + 面积[近似]
def cross(A,B): return A[0] * B[1] - A[1] * B[0] def vectorMinus( a , b): return ( (a[0] - b[0] )*10 ...
- Blend4精选案例图解教程(五):可视数据管理
原文:Blend4精选案例图解教程(五):可视数据管理 应用程序中我们会经常需要操作数据,在程序设计之初示例数据一般都是手工添加,Blend4提供了非常方便的数据管理能力,包括丰富的数据类型和内置示例 ...