NVelocity系列:NVelocity的语法及指令

我喜欢在Asp.Net MVC中使用NVelocity View Engine的一个很重要的理由就是 :NVleocity简洁易用的语法。几乎使用#set,#if,#foreach就可以构成完整的 应用,下面就介绍一下NVelocity中的语法及常用指令。

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

对变量的引用:$ [ ! ][ { ][ a..z, A..Z ][ a..z, A..Z, 0..9, -, _ ][ } ]。

在NVelocity中,对变量的引用都是以$开头加上变量名称。当使用!时表示当 此变量值为空时,显示空字符串。比如当$article为空,那会显示“$article“ ,而$!article会显示为“”。{}为变量名称限定,有时候变量名称后会有字符串 ,这是就需要用到{}了。比如$articleshow,想引用$article,这时只要修改为 ${article}就可以。其实,NVelocity对整个模板解析后都会变成这种模式。

对属性的引用:$ [ { ][ a..z, A..Z ][ a..z, A..Z, 0..9, -, _ ]* . [a..z, A..Z ][ a..z, A-Z, 0..9, -, _ ]* [ } ] 。

例如$article.Title或者${article.Title}。

对方法的引用:$ [ { ][ a..z, A..Z ][ a..z, A..Z, 0..9, -, _ ]* .[ a..z, A..Z ][ a..z, A..Z, 0..9, -, _ ]*( [ optional parameter list... ] ) [ } ]。

例如:$article.GetListByTitle('nvelocity')或 ${article.GetListByTitle('nvelocity')}。其实对对象的属性值也可以用 $article.get_Title()获得。

常用指令:

赋值指令#set:# [ { ] set [ } ] ( $ref = [ ", ' ]arg[ ", ' ] )。

例如:$article.Title='NVelocity',$$article.Categories=[1,2,3],当然 右侧也可以使用复杂的表达式: $article.Title=$otherArticle.Title.SubString(0,3),算术表达式: $article.Page=4/3等等。属性赋值也可以用$article.set_Title('NVelocity') 。

条件指令#if:# [ { ] if [ } ] ( [condition] ) [output] [ # [ { ] elseif [ } ] ( [condition] ) [output] ]* [ # [ { ] else [ } ] [output] ] # [ { ] end [ } ] 。

条件可以是返回bool的复查表达式。例如:#if($article.Total>1) $article.Title #else 没有数据 #end。

循环指令#foreach:# [ { ] foreach [ } ] ($refinarg)statement# [ { ] end [ } ]。

例如:#foreach($article in $articles) $article.Title #end。

引用静态资源指令#include:# [ { ] include [ } ] ( arg[ arg2 ... argn] )。

例如:#include('tmp.js'),会把tmp.js文件内容插入当前流。当然可以使用 表达式:#include($article.Url)。

引用并解析资源指令#parse:# [ { ] parse [ } ] ( arg )。

例如:#parse('tmp.js'),与#include不同是,假如tmp.js文件中有 NVelocity的指令,变量会进行处理,并把结果插入到当前流。

停止指令#stop:# [ { ] stop [ } ] 。

当NVelocity解析到此指令时,会停止解析过程。一般用户调试。

计算指令#evaluate:# [ { ] evaluate [ } ] ( arg )。

例如:#evaluate('$article.Title'),会在当前输出$article.Title。

以上是NVelocity的常用指令,下一篇将会讲NVelocity Macro的使用和如何开 发User Directive。

时间: 2024-09-15 12:41:30

NVelocity系列:NVelocity的语法及指令的相关文章

NVelocity系列:NVelocity配置详解

在VelocityEngine初始化前,可以通过ExtendedProperties配置NVelocity的 运行环境参数,当执行VelocityEngine的Init(ExtendedProperties)后, NVelocity会合并自定义配置和默认配置.NVelocity在 NVelocity.Runtime.RuntimeConstants中定义了默认配置项的名称,在内嵌资源 文件NVelocity.Runtime.Defaults.nvelocity.properties中定义了所有默

NVelocity系列:Getting Start With NVelocity

NVelocity是java velocity的c#实现,目前我在CodePlex维护着与velocity同 步的版本.NVelocity也在项目中使用着,在社区也有国外开发者的一些反馈. 下面是一个在Asp.Net如何使用NVelocity的非常简单例子: 定义HttpHandler: 1namespace NVelocity.TestWebsite 2{ 3 using System; 4 using System.Collections.Generic; 5 using System.IO

CodeSmith教程(4) 基本语法-CodeTemplate 指令

前面的几篇介绍了使用CodeSmith模板自动生成代码和编写代码模板的基本知识.也说过CodeSmith最核心的部分是代码模板 ,从本篇开始介绍CodeSmith代码模板的基本语法,对于Asp.Net程序员来说,可以说是碰到老朋友了:-) ,CodeSmith 的代码模 板和Asp.Net Page 几乎如出一辙. 本篇介绍CodeTemplate指令,这个是模板中唯一必须的声明,包含一些模板特殊的属 性,包含模板使用的语言.生成的语言和一些对于模板的描述.比如: <%@ CodeTemplat

JSP语法Page指令_JSP编程

Page 指令  定义JSP文件中的全局属性.  JSP 语法<%@ page [ language="java" ] [ extends="package.class" ] [ import="{package.class | package.*}, ..." ] [ session="true | false" ] [ buffer="none | 8kb | sizekb" ] [ autoFl

Nginx系列教程:在server_name指令中使用正则表达式

server_http://www.aliyun.com/zixun/aggregation/11696.html">name的匹配顺序 nginx中的server_name指令主要用于配置基于名称虚拟主机,server_name指令在接到请求后的匹配顺序分别为:1.准确的server_name匹配,例如: server { listen 80; server_name howtocn.org www.howtocn.org; ...} 2.以*通配符开始的字符串: server { li

抛弃NVelocity,来玩玩Razor

对于内容型,不易变动的东西我们都希望给它来个静态化,还有种情况就是比如新浪云不支持.net,为了能跑起我们的网站,只能放些静态页面上面,外加jsonp来实现交互,我们知道.net中有很多模板引擎,但都不是原装的,所以基本都没有代码提示,用起来比较不爽,自razor出来后,私活中也抛弃了原先使用的NVelocity,而采用原装的razor. 好了,我们先看看怎么玩,首先我们去codeplex上下两个dll.http://razorengine.codeplex.com/ 我想razor语法,大家都

JSP语法(7)——Taglib指令

js|语法 Taglib 指令 定义一个标签库以及其自定义标签的前缀. JSP 语法 <%@ taglib uri="URIToTagLibrary" prefix="tagPrefix" %> 例子 <%@ taglib uri="http://www.jspcentral.com/tags" prefix="public" %> <public:loop> . . </public

JSP语法(6)——Page指令

js|语法 Page 指令 定义JSP文件中的全局属性. JSP 语法<%@ page [ language="java" ] [ extends="package.class" ] [ import="{package.class | package.*}, ..." ] [ session="true | false" ] [ buffer="none | 8kb | sizekb" ] [ au

AngularJS 中的指令实践开发指南(一)_AngularJS

指令(Directives)是所有AngularJS应用最重要的部分.尽管AngularJS已经提供了非常丰富的指令,但还是经常需要创建应用特定的指令.这篇教程会为你讲述如何自定义指令,以及介绍如何在实际项目中使用.在这篇文章的最后(第二部分),我会指导你如何使用Angular指令来创建一个简单的记事本应用. 概述 一个指令用来引入新的HTML语法.指令是DOM元素上的标记,使元素拥有特定的行为.举例来说,静态的HTML不知道如何来创建和展现一个日期选择器控件.让HTML能识别这个语法,我们需要