- 浏览: 319764 次
- 性别:
- 来自: 广州
最新评论
-
ganbo:
我也遇到了,非常感谢。
实体类注解错误:Could not determine type for: java.util.List -
low_profile:
太感谢了,,,接手别人的项目/..代码风格不同 坑死我了 ...
实体类注解错误:Could not determine type for: java.util.List -
apang:
2016年6月15日 14:05:02,非常感谢,解决我的问题 ...
实体类注解错误:Could not determine type for: java.util.List -
liveabc:
你好,能发送一份代码不? liveabc@163.com 谢谢 ...
单点登录cas与权限管理框架shiro集成-spring项目方式 . -
zqb666kkk:
请问有示例源码吗
单点登录cas与权限管理框架shiro集成-spring项目方式 .
简要
References begin with $ and are used to get something.
Directives begin with # and are used to do something.
注释 单行 ## 多行 #* *# doc #** *#
引用
变量
属性
注意$customer.Address可以表示customer的getAddress方法,也可以表示customer map中的Address对应的value.
方法
As of Velocity 1.6, all array references are now "magically" treated as if they are fixed-length lists. This means that you can call java.util.List methods on array references.
可变参数当作数组。
属性查找顺序
小写的属性$customer.address
1.getaddress()
2.getAddress()
3.get("address")
4.isAddress()
大写的属性$customer.Address
1.getAddress()
2.getaddress()
3.get("Address")
4.isAddress()
Rendering
引擎把每一个引用都转变为String,可以调用toString方法转变。
Formal Reference Notation
Jack is a ${vice}maniac.
Now Velocity knows that $vice, not $vicemaniac, is the reference. Formal notation is often useful when references are directly adjacent to text in a template.
Quiet Reference Notation
<input type="text" name="email" value="$email"/>
当$email没有定义的时候输出$email.
<input type="text" name="email" value="$!email"/>
当$email没有定义的时候输出"".
Strict References Setting
对未定义变量,或null变量调用方法抛异常。
但是if语句可以使用未定义变量。
Directives
#set
- #set( $monkey.Say = ["Not", $my, "fault"] ) ## ArrayList
- #set( $monkey.Map = {"banana" : "good", "roast beef" : "bad"}) ## Map
#set( $monkey.Say = ["Not", $my, "fault"] ) ## ArrayList #set( $monkey.Map = {"banana" : "good", "roast beef" : "bad"}) ## Map
For the ArrayList example the elements defined with the [..] operator are accessible using the methods defined in the ArrayList class. So, for example, you could access the first element above using $monkey.Say.get(0).
Similarly, for the Map example, the elements defined within the { } operator are accessible using the methods defined in the Map class. So, for example, you could access the first element above using $monkey.Map.get("banana") to return a String 'good', or even $monkey.Map.banana to return the same value.
这个比较容易迷惑人。
If the RHS is a property or method reference that evaluates to null, it will not be assigned to the LHS.
- #set( $result = $query.criteria("name") )
- The result of the first query is $result
- #set( $result = $query.criteria("address") )
- The result of the second query is $result
#set( $result = $query.criteria("name") ) The result of the first query is $result #set( $result = $query.criteria("address") ) The result of the second query is $result
If $query.criteria("name") returns the string "bill", and $query.criteria("address") returns null, the above VTL will render as the following:
The result of the first query is bill The result of the second query is bill
- #set( $criteria = ["name", "address"] )
- #foreach( $criterion in $criteria )
- #set( $result = $query.criteria($criterion) )
- #if( $result )
- Query was successful
- #end
- #end
#set( $criteria = ["name", "address"] ) #foreach( $criterion in $criteria ) #set( $result = $query.criteria($criterion) ) #if( $result ) Query was successful #end #end
In the above example, it would not be wise to rely on the evaluation of $result to determine if a query was successful. After $result has been #set (added to the context), it cannot be set back to null (removed from the context).
One solution to this would be to pre-set $result to false. Then if the $query.criteria() call fails, you can check.
- #set( $criteria = ["name", "address"] )
- #foreach( $criterion in $criteria )
- #set( $result = false )
- #set( $result = $query.criteria($criterion) )
- #if( $result )
- Query was successful
- #end
- #end
#set( $criteria = ["name", "address"] ) #foreach( $criterion in $criteria ) #set( $result = false ) #set( $result = $query.criteria($criterion) ) #if( $result ) Query was successful #end #end
Literals
''和""的区别 ""可以"hello $name".
#literal() #end
Alternately, the #literal script element allows the template designer to easily use large chunks of uninterpreted content in VTL code. This can be especially useful in place of escaping multiple directives.
Conditionals
If / ElseIf / Else
if测试(1)布尔值(2)引用是否为空
Relational and Logical Operators
Note that the semantics of == are slightly different than Java where == can only be used to test object equality. In Velocity the equivalent operator can be used to directly compare numbers, strings, or objects. When the objects are of different classes, the string representations are obtained by calling toString() for each object and then compared.
Foreach Loop
可以得到$velocityCount,$velocityHasNext。
变量名,起始下标都可以在配置文件里面更改。
还可以设置directive.foreach.maxloops。
在foreach中可以#break。
Include
The #include script element allows the template designer to import a local file, which is then inserted into the location where the #include directive is defined. The contents of the file are not rendered through the template engine. For security reasons, the file to be included may only be under TEMPLATE_ROOT.
Parse
The #parse script element allows the template designer to import a local file that contains VTL. Velocity will parse the VTL and render the template specified.
可以设置directive.parse.max.depth,默认是10.
允许递归。
Stop
The #stop script element prevents any further text or references in the page from being rendered. This is useful for debugging purposes.
Evaluate
The #evaluate directive can be used to dynamically evaluate VTL.
Define
The #define directive lets one assign a block of VTL to a reference.
Velocimacros
宏的参数和调用时的个数必须匹配。
宏有inline的宏,对其他模板不可见。
宏传递的是名字,注意宏执行的时间。
Velocimacro Properties
velocimacro.library
velocimacro.permissions.allow.inline
velocimacro.permissions.allow.inline.to.replace.global
velocimacro.permissions.allow.inline.local.scope
velocimacro.context.localscope
velocimacro.library.autoreload
Getting literal
有效velocity变量的转义
转义字符\
注意velocity对未定义变量和已定义变量的处理是不一样的。
无效velocity变量的转义
${my:invalid:non:reference}
改成
#set( $D = '$' )
${D}{my:invalid:non:reference}
Escaping VTL Directives
这个转义时要比较小心。
Other Features and Miscellany
Math 加减乘除 mod
Range Operator 设置数组和foreach.
Advanced Issues: Escaping and !
Can I use a directive or another VM as an argument to a VM?
No. A directive isn't a valid argument to a directive, and for most practical purposes, a VM is a directive.
但是可以#center( "#bold( 'hello' )" )
Can I register Velocimacros via #parse() ?
Yes! This became possible in Velocity 1.6.
This is important to remember if you try to #parse() a template containing inline #macro() directives. Because the #parse() happens at runtime, and the parser decides if a VM-looking element in the template is a VM at parsetime, #parse()-ing a set of VM declarations won't work as expected. To get around this, simply use the velocimacro.library facility to have Velocity load your VMs at startup.
对于宏定义的查找是在parsetime,所以runtime的parse中如果有宏会有问题。
What is Velocimacro Autoreloading?
宏自动加载,用于开发环境。
字符串连接
放在一起就好。
发表评论
-
jquery获得select option的值 和对select option的操作
2012-06-09 21:33 1378获取Select : 获取select 选中的 t ... -
JQuery设置select控件只读
2012-06-09 17:33 16795select控件是一个特别的控件,没有readOnly属性 ... -
IE浏览器上传文件时本地路径变成”C:\fakepath\”的问题
2011-11-15 12:03 5568//判断浏览器类型 2 var is ... -
用VML画图(一些基本的矢量图)
2011-08-03 22:53 1223注:其中所有的left:top:都是针对图左上角的,比如圆,他 ... -
数据类型和Json格式
2011-07-30 20:02 8871. 前几天,我才知道有一种简化的数据交换格式,叫做ya ... -
关于javascript的apply和call函数
2011-07-26 00:05 7591、关于javascript的apply和call函数 ... -
freemark中split()的用法
2011-06-21 16:31 1165<#assign tvalue="my,nam ... -
限制文本域(textarea)输入字符数
2011-06-10 18:28 776以下为限制用户在文本域中输入的字符为100以内: 写道 & ... -
Velocity手册
2011-05-07 13:30 847Velocity是什么?Velocity是 ... -
7个非常优秀的高质量图标搜索引擎
2011-04-11 16:05 10111.http://www.iconfinder.com/ ... -
FusionCharts参数设置
2011-03-28 11:48 1517FusionCharts 参数设置功能特性animation ... -
freemarker以分号或垂直线隔开而循环
2011-03-10 19:56 1689<#if areas?exists & ... -
好网址收藏
2011-02-26 17:19 991My97日期控件:http://www.my97.net/dp ... -
Javascript监听网页刷新与关闭事件
2011-02-21 10:18 2284<script language="jav ... -
关于一个javascript的replaceAll()
2011-02-18 12:14 1132javascript本身没有replaceAll()这个方法, ... -
Document对象内容集合
2011-01-20 11:54 1091document 文挡对象 - J ... -
FreeMark内置函数使用说明
2011-01-11 09:47 1015在我们应用Freemarker过程中,经常会操作例如字符串,数 ... -
freemarker语法2
2011-01-07 17:21 6367最常用的概念1、 scalars:存储单值 字符串:简单文本 ... -
window.location.target控制问题
2011-01-05 11:28 11955location对象没有target属性.用js遍历所有的a, ... -
div属性
2011-01-03 11:23 1130div属性 div属性 color : #9999 ...
相关推荐
### Velocity学习笔记精要 **一、Velocity简介与特点** Velocity是一种基于Java的模板引擎,用于将静态数据和动态内容结合在一起,生成最终的HTML、XML或其他格式的文档。其最大的特点是性能高、易于理解和使用,...
Velocity是Apache软件基金会的一个开源项目,它是一款快速、强大且易用的模板引擎,用于生成动态Web内容。在Java世界中,Velocity常被用来作为MVC框架中的视图层技术,与Struts2等框架集成,以实现更灵活的页面渲染...
根据给定的文件信息,以下是对Struts2学习笔记中涉及的关键知识点的详细解析: ### Struts2框架概览 #### MVC模式的理解与演进 Struts2是基于MVC(Model-View-Controller)模式设计的一种Java Web开发框架。在MVC...
本笔记基于林子雨老师在MOOC上的《大数据技术原理》课程,旨在为IT从业者和大学生提供一个全面了解大数据的基础框架。 首先,我们要认识到大数据的发展背景。随着互联网的普及,以及物联网、社交媒体、移动设备等...
这篇学习笔记将引导我们深入了解 SpringBoot 的基本用法,包括项目的创建、返回视图、数据库交互、前端与后端数据传递、日志管理和安全控制等方面。 1. **新建项目**: 创建 SpringBoot 项目通常是通过 Maven 或 ...
张龙圣思园的Struts2学习笔记,无疑为Java开发者提供了一份宝贵的参考资料,它可能涵盖了Struts2的基础概念、核心组件、配置方式以及实战技巧。 首先,让我们深入了解Struts2的核心特性。Struts2是MVC(Model-View-...
Java私人学习笔记主要涵盖了Java编程语言以及与其相关的几个著名框架——Spring、Struts2和Hibernate,还有前端开发中常用的JavaScript。这些技术在IT行业中的应用广泛,是许多企业级应用开发的基础。以下是对这些...
尚学堂的Spring学习笔记.doc可能包含对这些特性的详细解释、实例代码以及如何在实际项目中应用的指导,对于想要深入理解Spring 3.0的开发者来说是一份宝贵的参考资料。通过阅读这份笔记,你可以系统地学习Spring 3.0...
"Hadoop学习笔记整理" 本篇笔记对Hadoop进行了系统的介绍和总结,从大数据的基本流程到Hadoop的发展史、特性、集群整体概述、配置文件、HDFS分布式文件系统等方面都进行了详细的讲解。 一、大数据分析的基本流程 ...
这个入门教程和学习笔记是针对初学者设计的,帮助他们快速理解和掌握Struts2的核心概念和实践操作。 Struts2的学习首先需要理解MVC模式。MVC模式将应用逻辑分为三个部分:模型负责业务逻辑,视图负责展示数据,而...
相比于其他模板引擎如Velocity,Freemaker支持更为灵活的过程调用、递归处理以及闭包回调等功能,使得开发者能够更加便捷地实现复杂的业务逻辑。 #### 二、基本语法 Freemaker使用特定的标签来定义其语法结构,这些...
本学习笔记将深入探讨Struts2的核心概念、工作原理以及如何在实际开发中有效利用它。 **1. MVC模式与Struts2** MVC模式是一种软件设计模式,它将业务逻辑(Model)、用户界面(View)和数据控制(Controller)分离...
### Struts2 学习重点知识点总结 #### 一、Struts2 概念与架构 **1.1 Struts2 简介** - **定义**:Struts2 是 Apache 组织提供的一个基于 MVC 架构模式的开源 Web 应用框架。 - **核心**:Struts2 的核心其实是 ...