强大的模板引擎开源软件NVelocity

摘要:
变量标识符映射到VelocityContext对象,稍后将介绍该对象。当模板引擎处理模板时,变量名将替换为VelocityContext C#代码Velocity中提供的值。初始化;VelocityContextcontext=newVelocityContext();上下文放Templatetemplate=null;尝试{template=Velocity.GetTemplate;}catch{System.Console.Out.WriteLine;}如果(template!下面的Velocimacaro仅用于保存击键和减少印刷错误。它介绍了NVelocity宏的一些概念。Velocity将解析并呈现指定的模板。#parse在根目录NVelocity-**测试模板下提供了各种模板语言语法的示例。以下是如何在NVe下使用C#中的模板引擎的简单示例locity-**示例目录。在中使用时。NET,您需要应用两个程序集NVelo City。dll和Commons.dll。这些文件位于NVelocity-***Build目录中。

强大的模板引擎开源软件NVelocity

背景知识
NVelocity(http://sourceforge.net/projects/nvelocity )是从java编写的Velocity移植的.net版本,是java界超强的模版系统,.net版本的NVelocity目前版本为0.42。
NVelocity拥有完善的、丰富的模板语言(VTL,Velocity Template Language) ,几乎所有高级语言的特性都可以在模板引擎语言中找到。(如流程控制语句、数学运算、关系和逻辑操作符、函数定义、注释等等)

NVelocity可以做什么?
能够快速生成所需的代码、SQL脚本、页面文件等基于文本内容的文件
生成速度快、模板语言完善、灵活性好
容易学习、开源,免费使用
前身为Velocity(Java),使用者多,资料全

用途
在编写代码的时候,我们可以发现很多内容都是不需要变化的,变化的只是一小部分内容,对不同的对象,这些内容不同。
如果我们需要生成一个变化的文档,是否需要在代码拷贝这些不变化的内容么,或者把它剥离开放到其他的文件去么?还有我们是否能对这些内容有一些简单的控制和引用么?

简单例子(主要规则:引用以$开头用于取得什么东西,而指令以# 开始用于做什么事情)

强大的模板引擎开源软件NVelocity第1张#set($foo = false)
强大的模板引擎开源软件NVelocity第1张#if ($foo)

强大的模板引擎开源软件NVelocity第1张
    this is true
强大的模板引擎开源软件NVelocity第1张
#elseif ($bar)
强大的模板引擎开源软件NVelocity第1张
    this is false
强大的模板引擎开源软件NVelocity第1张
#elseif (true)
强大的模板引擎开源软件NVelocity第1张
    this should be followed by two blank lines
强大的模板引擎开源软件NVelocity第1张
#end
强大的模板引擎开源软件NVelocity第1张
强大的模板引擎开源软件NVelocity第1张## this is a single line comment
强大的模板引擎开源软件NVelocity第1张
强大的模板引擎开源软件NVelocity第1张#*

强大的模板引擎开源软件NVelocity第1张
this is a multi line comment
强大的模板引擎开源软件NVelocity第1张
#if (
强大的模板引擎开源软件NVelocity第1张
*#
强大的模板引擎开源软件NVelocity第1张
强大的模板引擎开源软件NVelocity第1张
强大的模板引擎开源软件NVelocity第1张#set($user = "jason")
强大的模板引擎开源软件NVelocity第1张#set($login = false)
强大的模板引擎开源软件NVelocity第1张#set($count = 5)
强大的模板引擎开源软件NVelocity第1张
强大的模板引擎开源软件NVelocity第1张#if ($user == "jason")

强大的模板引擎开源软件NVelocity第1张
    the user $user is logged in!
强大的模板引擎开源软件NVelocity第1张
#end
强大的模板引擎开源软件NVelocity第1张
强大的模板引擎开源软件NVelocity第1张#if ($count == 5)

强大的模板引擎开源软件NVelocity第1张
    the count is 5!
强大的模板引擎开源软件NVelocity第1张
#end
强大的模板引擎开源软件NVelocity第1张
强大的模板引擎开源软件NVelocity第1张#if ($login == false)

强大的模板引擎开源软件NVelocity第1张
    the user isn't logged in.
强大的模板引擎开源软件NVelocity第1张#end
强大的模板引擎开源软件NVelocity第1张
强大的模板引擎开源软件NVelocity第1张#if ($count != 3)
强大的模板引擎开源软件NVelocity第1张    \$count is not equal to 3
强大的模板引擎开源软件NVelocity第1张#end
强大的模板引擎开源软件NVelocity第1张
强大的模板引擎开源软件NVelocity第1张



变量说明
在VTL中,所有变量标识符的开头要加上$字符,如$Name,也可以用一种更加明确的方法表示,例如${name}。
变量标识符被映射到稍后即将介绍的VelocityContext对象。在模板引擎处理模板时,变量名称(如name)被替换成VelocityContext中提供的值

C#代码

强大的模板引擎开源软件NVelocity第1张Velocity.Init("nvelocity.properties");
强大的模板引擎开源软件NVelocity第1张
强大的模板引擎开源软件NVelocity第1张VelocityContext context 
= new VelocityContext();
强大的模板引擎开源软件NVelocity第1张context.Put(
"list", Names);
强大的模板引擎开源软件NVelocity第1张
强大的模板引擎开源软件NVelocity第1张Template template 
= null;
强大的模板引擎开源软件NVelocity第1张
try
强大的模板引擎开源软件NVelocity第46张强大的模板引擎开源软件NVelocity第47张
强大的模板引擎开源软件NVelocity第48张{
强大的模板引擎开源软件NVelocity第49张   template 
= Velocity.GetTemplate("test.cs.vm");
强大的模板引擎开源软件NVelocity第50张}

强大的模板引擎开源软件NVelocity第1张
catch (ParseErrorException pee)
强大的模板引擎开源软件NVelocity第46张强大的模板引擎开源软件NVelocity第47张
强大的模板引擎开源软件NVelocity第48张{
强大的模板引擎开源软件NVelocity第49张   System.Console.Out.WriteLine(
"Syntax error: " +  pee);
强大的模板引擎开源软件NVelocity第50张}

强大的模板引擎开源软件NVelocity第1张
if (template != null)
强大的模板引擎开源软件NVelocity第46张强大的模板引擎开源软件NVelocity第47张
强大的模板引擎开源软件NVelocity第48张{
强大的模板引擎开源软件NVelocity第49张   template.Merge(context, System.Console.Out);
强大的模板引擎开源软件NVelocity第50张}

强大的模板引擎开源软件NVelocity第1张
强大的模板引擎开源软件NVelocity第1张

注释
单行注释
## This is a single line comment


多行注释
#*
 Thus begins a multi-line comment. Online visitors won't
 see this text because the Velocity Templating Engine will
 ignore it.
*#


属性或方法
$customer.Address
$purchase.Total

$page.SetTitle( "My Home Page" )
$person.SetAttributes( ["Strange", "Weird", "Excited"] )


指令
#set( $primate = "monkey" )
#set( $monkey.Friend = "monica" )

#set( $criteria = ["name", "address"] )
#foreach( $criterion in $criteria )

    #set( $result = $query.criteria($criterion) )
    #if( $result )
        Query was successful
    #end
#end


If / ElseIf / Else
Foreach 循环

#if( $foo < 10 )
    <strong>Go North</strong>
#elseif( $foo == 10 )
    <strong>Go East</strong>
#elseif( $bar == 6 )
    <strong>Go South</strong>
#else
    <strong>Go West</strong>
#end        


<ul>
#foreach( $product in $allProducts )
    <li>$product</li>
#end
</ul>

宏 (称为函数更合适)
#macro 脚本元素允许模板设计者在VTL 模板中定义重复的段。 Velocimacros 不管是在复杂还是简单的场合都非常有用。下面这个Velocimacro,仅用来节省击键和减少排版错误,介绍了一些NVelocity宏的概念。
可以带参数,参数放在宏名称的后面,空格隔开

#macro( d )
<tr><td></td></tr>
#end

#d()


#macro( callme $a )
         $a $a $a
#end
 
#callme( $foo.bar() )

包含
#include 脚本元素允许模板设计人员包含(导入)本地文件, 这个文件将插入到#include 指令被定义的地方。文件的内容并不通过模板引擎来渲染。
#include( "one.txt" )

解析
#parse 脚本元素允许页面设计员导入包含VTL的本地文件。 Velocity将解析和渲染指定的模板。
#parse( "me.vm" )


在根目录NVelocity-***\test\templates下有各种模板语言语法的实例,在NVelocity-***\ examples目录下有如何在C#中使用模板引擎的简单例子。
在.NET中使用时候,需要应用两个程序集,NVelocity.dll 和 Commons.dll,这些文件在NVelocity-***\Build目录下。
可以加入nvelocity.properties对模板引擎的一些参数进行配置。

免责声明:文章转载自《强大的模板引擎开源软件NVelocity》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[笔记]--Linux下运行Python时报错解决办法C# 将html文本转化为 文本内容方法TextNoHTML下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

故障排查:vsftpd无法用浏览器访问

CentOS6上设置的ftp服务器突然无法使用浏览器访问,但可以使用xftp等工具正常访问。据推测,阿里云的安全组设置之前已经过修改,这可能与1)修改vsftpd的配置,在被动模式下手动指定一个随机连接端口,并添加以下内容:passv_min_port=50000pasv_max_port=60000 02)如果只打开端口20和21,设置阿里云安全组控制端口...

微信小游戏流量主广告接入指南!

游戏通过审核发布上线,累计注册用户达到1000后,可以在管理后台开启流量主功能。广告接入广告类型有三种:激励式视频、插屏和BannerBanner广告接入需要注意:1.广告要显示全,不能放在屏幕外。我的游戏被以上原因拒绝了两次。我的banner广告是放在底部正中间,取最小宽度200。也就是尽量的小,不影响游戏操作。激励视频按钮一定要有视频广告相关的提示!...

安装pygame

在python3中安装pygame库。一段时间后,您可以看到安装成功,并且可以导入pygame...

avue 常用修改

1.搜索栅栏调整colum中对象的属性:searchSpan:4,column:[{label:"模型名称",prop:"name",search:true,searchSpan:4,},2.搜索框字段位置长度column:[{label:"流程标题23423432",searchLabelWidth:200,3.编辑页面,字段lable宽度设置labelW...

matlab中figure 创建图窗窗口

示例figure将f指定的图窗作为当前图窗,并将其显示在其他所有图窗的上面。figure;同时使用多个图窗创建两个图窗,然后创建一个线图。f1=figure;f2=figure;plot;将当前图窗设置为f1,使其成为下一个绘图的目标。figure;scatter;输入参数全部折叠f-目标图窗Figure对象目标图窗,指定为Figure对象。默认情况下,Nu...

Frp内网穿透安装教程#Frpc OpenWrt客户端安装#图形化管理

最新版本为0.33.0-1 II。路由器安装Frp图形操作界面luci-app-frpc1。通过SSH登录路由器后台。并将文件下载到路由器中的项目下载地址:https://github.com/kuoruan/luci-app-frpc/releases2.安装软件#安装luci app frpcopkinstallluci app frpc_1.2.1-1...