NVelocity语法

合集下载

使用NVelocity生成内容的几种方式

使用NVelocity生成内容的几种方式

使⽤NVelocity⽣成内容的⼏种⽅式使⽤NVelocity也有⼏个年头了,主要是在我的代码⽣成⼯具Database2Sharp上使⽤来⽣成相关代码的,不过NVelocity是⼀个⾮常不错的模板引擎,可以⽤来⽣成⽂件、页⾯等相关处理,⾮常⾼效和⽅便。

它原先是在⽹站上维护,不过从0.41后,该⽹站就不再进⾏NVelocity更新了,现在可以在⽹站/上获得最新版本的更新,接着版本的更新操作,我们把NVelocity的⼏种⽣成⽂件的操作介绍⼀下,以便⼤家进⾏更深⼊的了解。

我在早期⼏篇⽂章也介绍过NVelocity的使⽤,主要介绍了NVelocity的语法和逻辑的和使⽤,还有就是如何在实际项⽬中进⾏的内容动态⽣成的操作,有兴趣可以翻下下⾯⼏篇⽂章:1、基于NVelocity的⼏种内容⽣成⽅式从上⾯的图⽰,我们可以看到,NVelocity的模板化⽣成包含了3种⽅式,⼀种是从⽂件到⽂件或者字符串,⼀种是从字符串到字符串,他们各⾃的处理⽅式有所不同,但是都能正确解析⾥⾯的内容。

为了更好利⽤NVelocity的特性,我们对它进⾏⼀个初步的辅助类封装。

///<summary>///基于NVelocity的模板⽂件⽣成辅助类///</summary>public class NVelocityHelper{protected VelocityContext context;protected Template template;protected string templateFile;///<summary>///存放键值的字典内容///</summary>private Dictionary<string, object> KeyObjDict = new Dictionary<string, object>();///<summary>///添加⼀个键值对象///</summary>///<param name="key">键,不可重复</param>///<param name="value">值</param>///<returns></returns>public NVelocityHelper AddKeyValue(string key, object value){if (!KeyObjDict.ContainsKey(key)){KeyObjDict.Add(key, value);}return this;}................上⾯的AddKeyValue⽅法,主要⽤来为模板引擎添加⼀些需要绑定在页⾯上的变量对象,这样页⾯变量参数的内容就能正确解析出来了。

velocity模板

velocity模板

velocity模板Velocity模板。

Velocity是一种用于生成文本输出的模板语言,它可以用于生成HTML、XML、JSON等各种文档格式。

Velocity模板可以帮助开发人员将数据和模板进行分离,提高了代码的可维护性和可读性。

本文将介绍Velocity模板的基本语法和常见用法,希望能够帮助大家更好地理解和使用Velocity模板。

1. 变量定义和输出。

在Velocity模板中,可以使用$符号来引用变量,变量的定义和赋值使用#set指令。

例如:```。

#set($name = "Velocity")。

Welcome to $name!```。

上面的例子中,我们定义了一个名为name的变量,并将其赋值为"Velocity",然后通过$name来引用这个变量。

在模板输出中,$name会被替换为实际的数值,输出结果为:```。

Welcome to Velocity!```。

2. 条件判断。

Velocity模板中的条件判断使用#if指令。

例如:```。

#set($score = 85)。

#if($score >= 60)。

You have passed the exam.#else。

You have failed the exam.#end。

```。

在上面的例子中,我们定义了一个名为score的变量,并根据其数值进行条件判断。

如果score大于等于60,则输出"You have passed the exam.",否则输出"You have failed the exam."。

3. 循环。

Velocity模板中的循环使用#foreach指令。

例如:```。

#set($list = ["apple", "banana", "orange"])。

#foreach($item in $list)。

每个人应该知道的NVelocity用法

每个人应该知道的NVelocity用法

每个⼈应该知道的NVelocity⽤法NVelocity是⼀个基于.NET的模板引擎(template engine)。

它允许任何⼈仅仅简单的使⽤模板语⾔(template language)来引⽤由.NET代码定义的对象。

从⽽使得界⾯设计⼈员与.NET程序开发⼈员基本分离。

⼀、nVelocity的常⽤功能简介1、在页⾯中定义变量,并进⾏简单的运算。

2、在页⾯中获得对后台程序实体对象的引⽤。

3、在页⾯中迭代实体对象集合。

4、在页⾯中获得实体对象的属性,及其⽅法。

5、对逻辑判断语句的⽀持。

6、对外部⽂件的引⽤。

7、对外部⽂件的解析。

⼆、nVelocity的⼯作原理可以使⽤.NET的反射实现。

以下是nVelocity对迭代实体类的简单实现步骤:1、定义People类,并拥有Name与Sex属性。

表⽰⼀个⼈。

2、在页⾯中列出⼈物列表,则输⼊以下代码:#foreach(p in ps)<p>欢迎您:$</p>#end3、获取⼈物列表,保存在_List中。

并指定页⾯中的字符串“ps”对应_List。

4、以⽂本⽅式读取模板⽂件,并匹配#foreach…#end段,如果匹配到则继续匹配X in XX 段,分别记录⽤于保存集合与单项的字符,本次为“p”与“ps”。

5 、⽤Type对象的GetProperties()⽅法获取_list中每⼀项的所有属性,并在#foreach #end段中循环将$p + 属性名称替换为当前对象的当前属性的值。

当然如果要调⽤对象的⽅法也可以⽤同样的⽅式获得。

三、基本语法1、特殊字符介绍A、“#”:表⽰开始做什么事情。

B、“”:表⽰⽤于获得什么。

(以开头的表⽰“引⽤”意思是取得⼀些东东.可引⽤变量,属性,⽅法)C、“##“:单⾏注释。

D、 “#*… …*#”:多⾏注释。

2、关键字A、 Set:开始做什么事情,⽐如定义变量,给变量重新赋值等。

(注意:如果右边的操作数是⼀个属性或命令的引⽤⽽返回null,那么赋值将不会成功,且在随后的VTL中也不能再取出使⽤,如果要⽤做if条件,⼀个解决办法是,先给变量赋⼀个值,然后再将⼀个属性或命令的引⽤赋给该变量)B、 Foreach:迭代语句C、 If:条件判断语句D、 ElseifE、 ElseF、 Include:对外部⽂件的引⽤,开始位置为模板路径。

golang模板语法简明教程 - Pynix - 博客园

golang模板语法简明教程 - Pynix - 博客园

{{with $x := "output"}}{{printf "%q" $x}}{{end}} with结构中,在其它动作中使用定义的变量
{{wit "%q"}}{{end}}
/Pynix/p/4154630.html
{{"put" | printf "%s%s" "out" | printf "%q"}} 一个更复杂的调用。(等同于:printf("%q", printf("%s%s", "out", "put"))。)
{{"output" | printf "%s" | printf "%q"}} 等同于:printf("%q", printf("%s", "output"))。
说明:{{end}}标签是if、with、range的结束标签。
【例子:输出字符窜】 {{"\"output\""}} 输出一个字符窜常量。
{{`"output"`}} 输出一个原始字符串常量
{{printf "%q" "output"}} 函数调用.(等同于:printf("%q", "output")。)
【eq】 返回表达式“arg1 == arg2”的布尔值
【ne】 返回表达式“arg1 != arg2”的布尔值
【lt】 返回表达式“arg1 < arg2”的布尔值
【le】

velocity简介

velocity简介
Velocity
Velocity简介 Velocity语法(VTL) Spring中使用Velocity模板
什么是Velocity?
Velocity 是一个基于 Java 的模板引擎,它提供了简单的 基于模板的语言,可以用类似脚本的方式引用对象。 Velocity 促进了分离团队成员之间的责任:允许 Web 设 计人员专注于视图(即页面的观感),而 Java 程序员专 注于后端代码。Velocity将Java代码从Web页面中分离, 使Web站点更具长期可维护性。
VTL语法
<ul> #foreach( $product in $allProducts ) <li>$product</li> #end </ul> <ul> #foreach( $key in $allProducts.keySet() ) <li>Key: $key -> Value: $allProducts.get($key)</li> #end </ul>
##输出结果是:$moon = gibbous
VTL语法
2. 属性 属性的格式:$VTL标识符. VTL标识符 下面是属性引用的例子: $customer.Address $purchase.Total 3. 方法 方法的格式:$VTL标识符(参数列表) 下面是方法引用的例子: $customer.getAddress() $purchase.getTotal() $page.setTitle( "My Home Page" ) $person.setAttributes( ["Strange", "Weird", "Excited"] ) 属性引用和方法引用的主要区别是方法引用可以指定参数列表。

velocity模板引擎语法

velocity模板引擎语法

velocity模板引擎语法Velocity是一种Java的模板引擎,它能够用来轻松地完成网页的渲染页对象。

模板引擎其实就是一种直观的把动态数据插入到模板文件中的一种机制。

使用Velocity的主要目的是使网页的开发和维护变得更加容易,并且使处理Web文档变得更快更简单。

Velocity模板引擎语法主要有三类:变量指令、控制指令和宏指令。

变量指令包括set定义变量、$!静态变量、$引用变量、#foreach迭代变量和#set等;控制指令包括if判断语句、#with封装流程、#macro定义宏、#parse的include语句和#for循环等;宏指令用于定义由一系列反复使用的操作序列。

变量指令是Velocity最常用的指令类型,set定义变量时,可以把属性赋给一个变量:#set($name="zhangsan"),$!静态变量可以引用Velocity管理上下文对象:#set($ctx=$application.getVelocityContext()),以及$引用变量:$alertMessage,#foreach迭代变量和#set是比较常用的变量指令,#foreach用来迭代数组或者List:#foreach ($item in $userList),#set可以将变量设置为该变量的解析后的结果:#set($name = $name.toUpperCase())。

控制指令也非常常用,用#if语句判断是否满足条件:#if($libInfo.devFlag),#with封装流程可以对特定对象进行封装,使其可以在Velocity内部使用:#with($user),#macro定义宏:#macro(drawLine $lineOri)#end,#parse的include语句:#parse("test.htm"),#for循环:#for($i=0; $i<10; $i++)#end。

volicity语法

volicity语法

volicity语法
Velocity是一种模板引擎,用于生成文本输出,如HTML、电子邮件、配置文件等。

以下是Velocity的基本语法:
1. 变量:在Velocity中,变量使用“$”符号标识。

例如:$name、$age 等。

变量可以是任何文本字符串,可以在模板中使用它们来动态生成输出。

2. 指令:Velocity中的指令使用“”符号标识,如set、if、foreach等。

指令用于控制模板的逻辑和流程。

例如,set指令用于设置变量的值,if指令用于条件判断,foreach指令用于循环遍历集合。

3. 表达式:Velocity中的表达式使用“.”和“[]”符号来访问对象的属性和方法。

例如,$和$()。

表达式可以用于获取变量的值或调用方法。

4. 控制结构:Velocity支持条件控制和循环控制结构。

例如,if指令用于条件判断,foreach指令用于循环遍历集合。

这些控制结构可以嵌套使用,以实现更复杂的逻辑。

5. 注释:Velocity中的注释使用“”符号标识,并在模板中添加注释内容。

注释不会影响模板的输出结果。

以上是Velocity的基本语法,通过这些语法,可以在模板中定义变量、执行指令、使用表达式和控制结构来生成动态文本输出。

velocity基本语法及指南

velocity基本语法及指南

2.3 动作指令
• #if / #elseif / #else 条件判断
格式:#if (condition) statement #elseif ( condition ) statement #else statement #end 注:condition 如果是boolean 型,根据true 或false 决定, 否则非null 时认为是true. 其中比较是否相等皆用 “ == ”,包括数字、字符串, 以及同一个类的不同对象或不同类的对象

3. 环境配置
3.1 需要的.jar
commons-beanutils-1.7.0.jar 对bean操作的一些类 commons-collections-3.2.jar 扩展了java.util.Map的一些集合 commons-digester-1.8.jar 用于处理xml转换到对象的工具类 commons-lang-2.2.jar 扩展了ng的类 commons-logging-1.1.jar 日志输出类 velocity-1.7.jar 包含velocity运行时需要的类 velocity-tools-2.0.jar 视图控制和系统工具类
Velocity 模板介绍
1. Velocity
Velocity 是一个基于java 的模板引擎(template engine)。
2. VTL
提供一种简单、容易的方法将动态内容合并到Web页面。
2.1 VTL注释
• 单行注解:
例:## This is a comment. • 多行注解: 例:#* This is a multiline comment. This is the second line. *#
2.2 语法

velocity 语法

velocity 语法

velocity 语法
Velocity法是一种强大而丰富的模板语言,可以帮助开发人员
更加高效地开发 Web用程序。

它使用标记语言类似于 HTML表达逻辑,可以用于构造 Web用程序的各种元素,如页面的页眉、页脚、表单、输入框、按钮等。

Velocity法是一种动态语言,使得开发人员可以
使用其他语言(如 Java)实现动态数据的操作,比如将一组数据进
行过滤、排序和查询。

Velocity法定义了一系列标记,可以帮助开发人员构建动态 Web 用程序。

Velocity法中最重要的标记是 #if、#elseif、#else #end,它们用于构建条件语句,例如用于判断用户访问页面时是否登录、是否已经按钮被按下等等。

其他重要的标记包括 #foreach、#for、#set #end,这些标记用于将数据进行遍历、转换和计算,从而实现各种动态数据需求。

另外,Velocity法还提供了 #macro、#parse #include标记,
用于构建模板。

模板是程序的重要组成部分,可以帮助开发人员构建出可复用的页面部件。

例如,将细节部分封装在模板中,可以使得页面的外观更为统一,使开发人员可以更容易的维护应用程序的外观。

最后,Velocity法中还提供了一些辅助标记,如 #date #math,它们可以用于实现一些计算,如计算日期之间的间隔以及进行数学计算等。

从上面可以看出,Velocity法提供了一系列强大而丰富的标记,用于构建动态 Web用程序,并且还提供了一些辅助性的标记来实现
更多有用的计算功能。

Velocity法可以为开发人员提供更高效、更灵活的 Web用程序开发体验,是一种十分实用的 Web发工具。

lammps中的velocity语法

lammps中的velocity语法

一、简介LAMMPS是一款经典分子动力学模拟程序,广泛用于模拟原子尺度的材料科学和生物学现象。

在LAMMPS中,velocity命令被用来为模拟中的粒子分配速度。

本文将详细介绍velocity命令的语法和用法。

二、命令语法在LAMMPS中,velocity命令的基本语法如下:velocity ID keyword args其中,各部分含义如下:1. ID:表示要为其分配速度的粒子组的标识符。

2. keyword:表示速度分配的方式,包括设定固定速度、随机速度等方式。

3. args:表示速度分配的参数,包括速度大小、速度方向等。

三、速度分配方式在LAMMPS中,velocity命令可以根据用户指定的方式为粒子分配速度。

常用的速度分配方式包括:1. set:设置固定速度。

通过指定固定的速度大小和方向,将该速度分配给粒子组中的所有粒子。

2. create:创建随机速度。

通过指定速度的分布范围和分布类型,为粒子组中的所有粒子分配随机速度。

3. ramp:通过线性插值的方式逐渐改变速度。

可以将某个粒子组的速度从0逐渐增加到指定的速度大小。

四、速度分配参数在velocity命令中,可以通过args部分来指定速度分配的参数。

具体的参数包括:1. region:指定粒子的运动区域。

可以通过指定一个区域来限制粒子速度的范围。

2. units:指定速度的单位。

可以选择不同的速度单位,如埃/飞秒、纳米/皮秒等。

3. distribution:指定随机速度的分布类型。

可以选择均匀分布、高斯分布等不同的速度分布类型。

4. bias:指定速度分布的偏置。

可以通过设置偏置参数来调节速度分布的形状。

5. fixID:指定一个fix命令的标识符。

可以通过fix命令实现在模拟过程中动态改变速度。

五、示例以下是一个使用velocity命令为粒子分配速度的示例:velocity all create 300.0 xxx dist gaussian该命令的含义是:为系统中的所有粒子随机分配速度,速度大小在300.0范围内,速度的分布类型为高斯分布。

NVelocity VTL语法

NVelocity VTL语法

注释单行注释以##开始,多行注释以#*开始,以*#结束。

注释的内容不会出现在输出中属性属性引用以$符号开始。

属性可以是服务器端C#代码设置的,也可以在NVelocity模板中定义属性,比如下面语句在NVelocity模板中定义一个属性#set (#msg="this variable is defined in NVelocity.")NVelocity中定义的属性一般为字符串值,赋值时可以使用单引号将字符串值括起来,也可以使用双引号,他们的区别是:如果字符串值中有用到其他变量,使用单引号时该变量名字直接作为字符串的值处理,而使用双引号时该变量名字将使用属性的值进行替换(可以设置NVelocity关闭这个选项)在模板中如果需要输出以$符号开始的文本(非变量),有2种处理方式。

如果他不会作为属性赋值,则可以直接输出,因为NVelocity对没有赋值的属性,直接输出属性名字(包括$符号);如果他是一个已经赋值的属性,则需要在$符号前面添加一个转义用的反斜杠\符号对于非字符串类型的属性,NVelocity调用属性的ToString()方法转换为字符串输出对于对象类型的属性,可以使用类似$方式,NVelocity目前的版本已经支持属性名称非大小写敏感控制指令条件指令:NVelocity中的控制指令基本上就2个:条件指令和循环指令。

NVelocity对宏的支持不太好#if($score>1000) Expert #elseif($score>500) Senior #else Junior #endif与Velocity不一样的地方:NVelocity不支持#{else}这个语法,#else、#endif指令必须与前后的内容空格分开循环指令:NVelocity的循环指令,每个指令必须单独占用一行,不能有注释、输出内容等NVelocity对Velocity的循环指令做了扩展,加入了Fog Creek的Fancy Loops基本语法如下:#foreach($i in $items)#each(this is optional since its the default section)text which appears for each item#beforetext which appears before each item#aftertext which appears after each item#betweentext which appears between each two items#oddtext which appears for every other item, including the firsttext which appears for every other item, starting with the second #nodataContent rendered if $items evaluated to null or empty#beforealltext which appears before the loop, only if there are itemsmatching condition#afteralltext which appears after the loop, only of there are itemsmatching condition#endFancy Loops 指令非常实用,例如在StringTemplate 中想要类似的效果就比较麻烦其他还有#include 、#parse 、#stop 指令,详细的语法参考VTL Reference基本用法下载Castle NVelocity 项目,建一个测试用的web site ,引用NVelocity.dll ,引用的命名空间如下:using System;using System.Collections.Generic;using System.Data;using Commons.Collections;using NVelocity;using NVelocity.App;using NVelocity.Runtime;建立一个NVelocity 模板,内容如下:01 <div class="query-form">02 <table>03 <tr>04 <td>姓名:</td>05 <td><input type="text" id="txtQryName" class="text" value="$qryName" /></td>06 <td>地址:</td>07 <td><input type="text" id="txtQryAddress" class="text" value="$qryAddress" /></td>08 <td><input type="button" id="btnQuery" value="查询" /></td> 09 </tr>10 </table>11 </div>12 <br>13 <h2>Contact List</h2>14 <div class="contact-list">15 #foreach($c in $contacts)16 #beforeall17 <table>18 <tr class="list-header">19 <td>姓名</td>20 <td>邮箱</td>21 <td>地址</td>22 <td>会员等级</td>23 </tr>24 #odd25 <tr class="list-odd">26 #even27 <tr class="list-even">28 #each29 <td>$c.set_Name("$ - W") $c.get_Name()</td>30 <td><a href="mailto:$c.EMail">$c.EMail</a></td>31 <td>$c.Address</td>32 <td>#if($c.TotalOrderAmt>1000)钻卡会员33 #elseif($c.TotalOrderAmt>200)金卡会员34 #else Standard#end</td>35 #after36 </tr>37 #afterall38 </table>39 #nodata40 No contacts found!41 #end42 </div>页面.cs代码如下:01 public class Contact02 {03 public string Name { get; set; }04 public string EMail { get; set; }05 public string Address { get; set; }06 public decimal TotalOrderAmt { get; set; }07 }08 <br>09 protected void Page_Load(object sender, EventArgs e)10 {11 VelocityEngine engine = new VelocityEngine();12 ExtendedProperties prop = new ExtendedProperties();13 prop.AddProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, Server.MapPath("./"));14 prop.AddProperty(RuntimeConstants.ENCODING_DEFAULT, "utf-8");15 engine.Init(prop);16 Template template = engine.GetTemplate("contact-list.vm");17 VelocityContext context = new VelocityContext();18 context.Put("contacts", new List<Contact>()19 {20 new Contact() {21 Name="Richie Liu", TotalOrderAmt=180,22 EMail="RichieLiu-test@",23 Address="上海徐汇区钦州路" },24 new Contact() {25 Name="Kevin Zhang",TotalOrderAmt=0,26 EMail="KevinZhang-test@",27 Address="苏州新区" },28 new Contact() {29 Name="Eric Wong", TotalOrderAmt=626,30 EMail="EricWong-test@",31 Address="厦门海沧" },32 new Contact() {33 Name="RicCC", TotalOrderAmt=2080,34 EMail="RicCC-test@",35 Address="上海徐汇区钦州路" }36 });37 context.Put("qryName", "Ric");38 context.Put("qryAddress", DateTime.Now);39 <br>40 template.Merge(context, this.Response.Output);41 }则页面运行结果:上面的代码中,演示了在NVelocity 模板中调用对象的方法,比如$c.get_Name()通过getter 方法读取属性值;$c.set_Name("$ - W")为每个contact 的名字添加一个-W 后缀 如果$contacts 集合中没有记录,则只会输出No contacts found!文本,不会输出任何table 信息,包括#beforeall 、#afterall 指令中的内容也不会输出接下来测试一下#foreach 指令能够支持的集合类型以及用法(只要支持IEnumarable 接口的都可以使用#foreach 指令)NVelocity 模板如下:01 <br />02 <h2>Item List - Array</h2>03 <div>04 #foreach($item in $items1)05 #each06 $item07 #betwee n08 ,09 #end10 </div>11 <br>12 <br />13 <h2>Item List - List</h2>14 <div>15 #foreach($item in $items2)16 #each17 $item.ToString("yyyy-MM-dd")18 #between19 ,20 #end21 </div>22 <br>23 <br />24 <h2>Item List - Dictionary</h2>25 <div>26 #foreach($item in $items3)27 #each28 { $item.Key - $item.Value }29 #between30 ,#end31 </div>32 <br>33 <br />34 <h2>Item List - DataTable</h2>35 <div>36 #foreach($item in $items4.Rows)37 { $item.Key - $item.Value }38 #between39 ,40 #end41 </div>服务器端设置属性的代码如下:01 context.Put("items1", new string[] { "AAA", "BBB", "CCC" });02 context.Put("items2", new List<DateTime> { new DateTime(1979, 1, 1), new DateTime(2010, 4, 1) });03 <br>04 IDictionary<string, decimal> dic = new Dictionary<string, decimal>(); 05 dic.Add("AAA", 111M);06 dic.Add("BBB", 222M);07 dic.Add("CCC", 333M);08 context.Put("items3", dic);09 <br>10 DataTable table = new DataTable();11 table.Columns.Add(new DataColumn("Key", typeof(string)));12 table.Columns.Add(new DataColumn("Value", typeof(int)));13 DataRow row = table.NewRow();14 row["Key"] = "item 1";15 row["Value"] = 111;16 table.Rows.Add(row);17 row = table.NewRow();18 row["Key"] = "item 2";19 row["Value"] = 222;20 table.Rows.Add(row);21 context.Put("items4", table);页面运行效果如下:。

velocityengine 语法

velocityengine 语法

velocityengine 语法(原创版)目录1.介绍 VelocityEngine 语法2.VelocityEngine 语法的特点3.VelocityEngine 语法的应用场景4.VelocityEngine 语法的优势与不足5.总结正文VelocityEngine 语法是一种用于模板引擎的语法,其作用主要是将数据与模板相结合,生成动态的内容。

VelocityEngine 语法具有简洁、易学的特点,广泛应用于 Web 开发、邮件发送、文本处理等领域。

VelocityEngine 语法的特点主要体现在以下几个方面:1.语法简洁:VelocityEngine 语法采用简单的模板标记,如#foreach、#if、#else 等,易于理解和使用。

2.强大的数据处理能力:VelocityEngine 支持各种数据类型,包括数字、字符串、数组、对象等,并提供丰富的内置函数,方便开发者进行复杂的数据处理。

3.良好的兼容性:VelocityEngine 可以与各种开发环境和框架无缝集成,如 Spring、Hibernate 等。

VelocityEngine 语法的应用场景主要包括:1.Web 开发:在 Web 开发中,VelocityEngine 可以用于生成动态的HTML、XML 等文档,以及处理用户提交的表单数据。

2.邮件发送:VelocityEngine 可以方便地生成并发送邮件,支持附件、HTML 内容等。

3.文本处理:VelocityEngine 可以用于处理各种文本文件,如批量替换、分割、合并等操作。

当然,VelocityEngine 语法也存在一些优势与不足:1.优势:VelocityEngine 语法简单易用,性能优越,可以显著提高开发效率。

2.不足:与其他模板引擎相比,VelocityEngine 的生态相对较小,可能无法满足一些特殊需求。

总之,VelocityEngine 语法是一种实用的模板引擎语法,具有广泛的应用前景。

velocity(vm)模板引擎基本语法

velocity(vm)模板引擎基本语法

velocity(vm)模板引擎基本语法for循环#foreach($acc in $!{param.tools})#set($count = $count + 1)<li custom-data="$!{code}" cube-data="$!{acc.owner}" node-data="$!{acc.balance}"><a href="javascript:void(0);">$!{acc.accountName}&emsp;可⽤余额&emsp;$!{acc.balance}元</a></li>#endif条件语句#if(${supportWorkerPay})#endform表单提交<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()⽅法的结果。

velocity模板 for语法

velocity模板 for语法

velocity模板 for语法Velocity模板语言是一种用于动态生成文本的模板语言,它广泛用于Java应用程序中。

Velocity模板语法包含了一些基本的元素和语法结构,下面我将从不同的角度来介绍Velocity模板语言的for语法。

1. 基本语法结构:Velocity模板中的for语法结构类似于Java中的for循环,用于迭代集合中的元素。

其基本语法结构如下:#foreach( $item in $list )。

...循环体...#end.其中,$item是迭代时的临时变量,$list是要迭代的集合。

2. 遍历集合:使用for语法可以方便地遍历集合中的元素,例如:#set( $list = [1, 2, 3, 4] )。

#foreach( $item in $list )。

$item.#end.上述代码将会输出集合中的每一个元素。

3. 获取索引值:有时候我们需要在循环过程中获取元素的索引值,Velocity也提供了相应的语法结构:#foreach( $item in $list )。

$velocityCount. $item.#end.其中$velocityCount是内置的变量,表示当前迭代的次数,从1开始。

4. 嵌套循环:在Velocity模板中,我们也可以使用嵌套的for循环来处理嵌套的集合结构,例如:#foreach( $outer in $outerList )。

#foreach( $inner in $outer.innerList )。

$outer $inner.#end.#end.上述代码展示了如何遍历嵌套的集合。

5. 控制流:在for循环中,我们还可以使用break和continue来控制循环的执行流程,类似于Java中的用法。

总的来说,Velocity模板语言中的for语法提供了丰富的功能和灵活的应用方式,能够满足我们在模板中处理循环逻辑的需求。

希望以上介绍能够帮助你更好地理解和应用Velocity模板语言中的for语法。

Velocity基本语法

Velocity基本语法

Velocity基本语法1.变量(1)变量的定义:#set($name = “hello”)说明:velocity中变量是弱类型的。

当使⽤#set 指令时,括在双引号中的字⾯字符串将解析和重新解释,如下所⽰:#set($directoryRoot = “www” )#set($templateName = “index.vm” )#set($template = “$directoryRoot/$templateName” )$template输出将会是:www/index.vm注:在velocity中使⽤$2.5这样的货币标识是没有问题得的,因为velocity中的变量总是以⼀个⼤写或者⼩写的字母开始的。

(2)变量规范的写法${name} ,也可以写成:$name。

提倡⽤前⾯的写法。

例如:你希望通过⼀个变量$vice来动态的组织⼀个字符串。

Jack is a $vicemaniac.本来变量是$vice现在却变成了$vicemaniac,这样Veloctiy就不知道您到底要什么了。

所以,应该使⽤规范的格式书写:Jack is a ${vice}maniac现在Velocity知道变量是$vice⽽不是$vicemaniac。

注意:当引⽤属性的时候不能加{}(3)变量的赋值:$name=”hello”赋值的左边必须是⼀个变量或者是属性引⽤。

右边可以是下⾯六种类型之⼀:变量引⽤,字⾯字符串,属性引⽤,⽅法引⽤,字⾯数字,数组列表。

下⾯的例⼦演⽰了上述的每种类型:#set( $monkey = $bill ) ## variable reference#set( $monkey.Friend = “monica” ) ## string#set( $monkey.Blame = $whitehouse.Leak ) ## property reference#set( $monkey.Plan = $spindoctor.weave($web) ) ## method reference#set( $monkey.Number = 123 ) ##number#set( $monkey.Say = [“Not”, $my, “fault”] ) ## ArrayList注意:①如果上述例⼦中的右值是null, 则左值不会被赋值,也就是说会保留以前的值。

velocity用法

velocity用法

velocity用法
Velocity是一个英语单词,意思是速度。

它可以用于多种场景,包括物理学、运动学、天文学等领域,也可以用于描述人类活动的速度。

下面将介绍Velocity的一些用法,并
给出例句。

物理学:
在物理学中,Velocity通常用于描述物体在一段时间内运动的速度和方向。

它是一个向量量纲,可以用公式v = Δx / Δt 表示,其中v表示Velocity,Δx表示物体在Δt
时间内运动的距离。

例句:The velocity of the car was 60 miles per hour.(这辆汽车的速度是60
英里每小时。


运动学:
在运动学中,Velocity也被用来描述对象在一段时间内的速度和方向,但是它还可以区分航向和偏航角度。

Velocity对于运动的自由度也很重要,因为它可以确定对象在三维空间中的位置。

天文学:
在天文学中,Velocity通常指天体相对于观测者的速度或者是天体在其轨道上运动的速度。

天文学家使用Velocity来测量星系、行星和恒星的速度,并确定它们的位置和方向。

人类活动:
Velocity也可以用于描述人类活动的速度和效率。

在管理和生产领域中经常使用Velocity来衡量某个过程的速率和效率,并从中推断出改进机会。

总结:
以上是Velocity的一些用法,它是一个具有多重含义的单词,在不同领域中都有广
泛的应用。

无论是物理学、运动学、天文学,还是管理和生产,都需要用到Velocity。

希望本文能够为您明确Velocity的用法,帮助您更好地理解和运用它。

velocity调用方法

velocity调用方法

velocity调用方法Velocity是一种基于Java的模板引擎,它广泛应用于Web开发中。

借助Velocity,我们可以在模板中调用方法,实现更加灵活和动态的页面渲染效果。

本文将介绍如何在Velocity模板中调用方法的基本语法和常见应用场景。

一、基本语法在Velocity模板中,调用方法的语法非常简单,只需使用点号(.)连接对象和方法名即可。

例如,假设我们有一个Java对象user,其中包含一个getName()方法,那么在Velocity模板中调用该方法的语法如下:$user.getName()这样就可以将该方法的返回值插入到模板中相应的位置。

二、调用静态方法除了调用对象的方法,Velocity还支持调用静态方法。

在模板中调用静态方法的语法和调用对象方法类似,只需使用类名替代对象名。

例如,假设我们有一个Java类StringUtils,其中包含一个静态方法capitalize(String str),可以将字符串的首字母大写,那么在Velocity模板中调用该静态方法的语法如下:$StringUtils.capitalize("hello")三、传递参数在调用方法时,我们还可以传递参数。

参数可以是常量、变量或表达式。

例如,假设我们有一个Java对象user,其中包含一个getFullName(String firstName, String lastName)方法,可以根据姓氏和名字生成全名,那么在Velocity模板中调用该方法并传递参数的语法如下:$user.getFullName($firstName, $lastName)其中$firstName和$lastName可以是变量,也可以是表达式。

四、调用方法的返回值在Velocity模板中调用方法后,可以使用方法的返回值进行进一步处理。

例如,调用一个返回字符串的方法后,可以对返回的字符串进行截取、拼接等操作。

调用一个返回集合的方法后,可以使用循环遍历集合的每个元素。

Velocity常用方法

Velocity常用方法

Velocity常⽤⽅法1.字符串替换 replace#if($!{name} != '')#set($tempName = $!{name})#set($tempName = $tempName.Replace('abc','def'))$tempName#end2.decimal数据类型转换成⼀定的字符串格式 tostring需要计算的:如(number/1000).tostring("f1");#if($strDecimal)$strDecimal.ToString(""f0"")<br/>#end <br/>#if($objectDecimal)$objectDecimal.Price.ToString(""f0"")<br/>#end <br/>#if($tableDecimal)#foreach($model in $tableDecimal.Rows)$model.Price.ToString(""f0"")<br/>#end#end3.DateTime数据类型转换成⼀定的字符串格式 tostring#if($datetime)$datetime.ToString(""yyyy-MM-dd"")<br/>#end <br/>#if($date)$date.time.ToString(""yyyy-MM-dd hh:mm:ss"")<br/>#end <br/>#if($table)#foreach($model in $table.Rows)$model.time.ToString(""yyyy年MM⽉dd⽇"")<br/>#end#end4.Trim() 去除空格#if($!{name} != '')#set($tempName =$!{name})#if($tempName == ' abc ')还没有去除⾸尾空格<br/>#end#set($tempName =$tempName.Trim())#if($tempName == 'abc')去除成功#end$tempName#end5.获取对象条数Datatable: $table.Rows.Count数组: $tempList.LengthList: $tempList.Count字符串长度: str.Length6.判断是否为’’#if($!{name} != ‘’)有值#end#if($!{name} == ‘’)空值#end7.null、notnull的⽤法#if($!{name})⾮空#end#if(! $!{name})空#end8.SubString()的⽤法#set($tempName = $!{name})#if($tempName.Length > 70)$tempName.Substring(0,70)...#else$tempName#end9.velocityCount 序值10.获取数组元素(不能直接arr[]):$arr.get_item(0)11.分割字符串#set($str="111#222")#set($arr=$UtilHelper.SpiltString("$str","#"))<p>$arr.length</p>#foreach($item in $arr)<h2>$item</h2>#end。

Velocity 语法

Velocity 语法

Property referenceMethod referenceNumber literal #set ($i=1)ArrayList #set ($arr=["yt1","t2"])算术运算符2、注释:单行## XXX多行#* xxxxxxxxxxxxxxxxxxx*#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$hashtable user中的的name值.类似:user.get("name")5、Methodsobject 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" 返回testhellotest'$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>$</td></tr> #end11、velocityCount变量在配置文件中定义# Default name of the loop counter# variable reference. = velocityCount# Default starting value of the loop# counter variable reference.directive.foreach.counter.initial.value = 112、包含文件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

默认情况下,NVelocity解析是不分大小写的,当然可以通过设置runtime.strict.math=true,采用严格解析模式。

##指定用户名字欢迎你: $!<table>###输出用户喜好的MuD#foreach( $mud in $mudsOnSpecial )#if ( $customer.hasPurchased($mud) )<tr><td>$flogger.getPromo( $mud )</td></tr>#end#end</table>set指示符使用一个表达式(expression) (包含在一对括号里) –将一个值value (这里是Velocity)付给变量a,(变量名在左边,值在右边,用=组合起来).以$开头的表示“引用”意思是取得一些东东.可引用变量,属性,方法属性可以引用到对象的命令. Velocity会使用合适的策略选择引用到的命令. 它会根据协定的命令命令格式查找. 无论属性引用的的名字是否大小写,Velocity都有固定的查找规则.如在$customer.address引用时,查找顺序是:getaddress()getAddress()get("address")isAddress()对于VTL中大写的属性名Address引用,将是:getAddress()getaddress()get("Address")isAddress()正规引用格式${mudSlinger}1.Jack is a $vicemaniac.2.Jack is a ${vice}maniac.这样,Velocity就知你要的是$vice, 而不是$vicemaniac变量,正规引用格式一般用于在模板中直接调整字符串内容.Quiet Reference Notation(静态引用输出)Velocity遇到一个不能处理的引用时,一般他会直接输出这个引用$email的写法,页面上会看到的是$email,如下例,我们可以在$后面加上一个!号,那么就会输出空白:.<input type="text"name="email"value="$email"/><input type="text"name="email"value="$!email"/>正式的写法是:.<input type="text"name="email"value="$! {email}"/>Getting literal( 语义问题)velocity使用$,#字符来标志它的声明,但有时,HTML中因为某种其它意图,也会写出这样的字符1.Currency(货币标志)如美元 $2.50!这样的写法出现到模板中, VTL处理时是不会出错,会正确的输出$2.50!这个你想要的结果。

为什么呢?一个合法的VTL标示符是以一个字母开头的如下示,如果没有#set( $email = "foo" )这一行且java代码中Context对象中没有放放email对象,将直接输出$email.#set( $email = "foo" )$email如果email己定义了 (比如它的值是foo),而这里你却想输出$email. 这样一个字符串,就需要使用转义字符”\”.## The following line defines $email in this template:#set( $email = "foo" )$email\$email\\$email\\\$email上面的模板在web页面上的输出将是:foo$email\foo\$email但如果email并没有定义,我们这样写:.$email\$email\\$email\\\$email输出就原封不动了:$email\$email\\$email\\\$email注意:当己定义变量和未定义变量一起输出时,会输出字面意思,如下便,$moon是未定义的:#set( $foo = "gibbous" )$moon = $foo输出到web页面中将是$moon = gibbouCase Substitution(可选的格式)$foo.getBar()## 等同于$foo.Bar$data.setUser("jon")##等同于#set( $er = "jon" )$data.getRequest().getServerName()##等同于$data.Request.ServerName## is the same as${data.Request.ServerName}指令:(Directives)则以#开头来表示,有点“做些什么动作”的意思. #set( $monkey = $bill ) ## variable reference#set( $monkey.Friend = "monica" ) ## stringliteral#set( $monkey.Blame = $whitehouse.Leak ) ##property reference#set( $monkey.Plan = $spindoctor.weave($web) ) ## method reference#set( $monkey.Number = 123 ) ##number literal#set( $monkey.Say = ["Not", $my, "fault"] ) ## ArrayList#set( $monkey.Map = {"banana" : "good", "roast beef" : "bad"}) ## Map注意:如果右边的操作数是一个属性或命令的引用而返回null,那么赋值将不会成功,且在随后的VTL中也不能再取出使用#set( $criteria = ["name", "address"] )#foreach( $criterion in $criteria )#set( $result = $query.criteria($criterion) ) #if( $result )Query was successful#end#end在上例中,就不能依赖if( $result )来决定查询是否成功. $result一但被#set 为null (context会同样), 它将不能被赋其它值 (不能从 context中取出).一个解决办法是,每次都将$result设为false. 如果$query.criteria()调用成功,就可以检测到.#set( $criteria = ["name", "address"] )#foreach( $criterion in $criteria )#set( $result = false )#set( $result = $query.criteria($criterion) ) #if( $result )Query was successful#end#end注意:#set不需要使用#end来声明结尾.使用#set指令时,变量如果用 “”引起会被解析,如:#set( $directoryRoot = "www" )#set( $templateName = "index.vm" )#set( $template = "$directoryRoot/$templateName" ) $template输出的将是:www/index.vm但当用单引号引起来时,就不会被解析::#set( $foo = "bar" )$foo#set( $blargh = '$foo' )$blargh输出后会是:bar$foo默认情况下,不会解析单引号中的变量,当然,这可以通过改变Velocity的配置参数来改变:velocity.properties such that stringliterals.interpolate=false.通过引用变量$velocityCount可以访问到Velocity提供的计数器:<table>#foreach( $customer in $customerList )<tr><td>$velocityCount</td><td>$</td></tr>#end</table>#include脚本元素让模板设计者可以在模板中引入一个本地文件, 这个被引入的文件将不会经过Velocity的解析. 安全起见,可以引放的文件只是是配置参数TEMPLATE_ROOT所定义目录下的,默认为当前目录下. #include( "one.txt" )如果需要引入多个文件,可以像下面这样.#include( "one.gif","two.txt","three.htm" )当然,还可用一个变量名来代替文件名引入.#include( "greetings.txt", $seasonalstock )#parse元素指示可以引入一个包含TVL的本地文件,这个文件将被Veloict engine解析输出。

.#parse( "me.vm" )与#include指令不同, #parse可以从引入的模板中得到变量引用.但#parse指令只能接受一个参数.VTL templates 被#parse的模板中还可以再包含#parse声明,默认的深度为10,这是由配置参数directive.parse.max.depth在文件velocity.properties中决定的,你可以修改它以适合项目要求#stop指令用来指示在模板的某处,engine停止解析,这一般用来调用。

相关文档
最新文档