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是一种用于生成文本输出的模板语言,它可以用于生成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是⼀个基于.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 - 博客园

{{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语法(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是一种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语法
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基本语法及指南

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 语法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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停止解析,这一般用来调用。