標籤:style blog http color io os 使用 java ar
背景知識
NVelocity(http://sourceforge.net/projects/nvelocity )是從java編寫的Velocity移植的.net版本,是java界超強的模版系統,.net版本的NVelocity目前版本為0.42。
NVelocity擁有完善的、豐富的範本語言(VTL,Velocity Template Language) ,幾乎所有進階語言的特性都可以在模板引擎語言中找到。(如流程式控制制語句、數學運算、關係和邏輯操作符、函數定義、注釋等等)
NVelocity可以做什嗎?
能夠快速產生所需的代碼、SQL指令碼、分頁檔等基於常值內容的檔案
產生速度快、範本語言完善、靈活性好
容易學習、開源,免費使用
前身為Velocity(Java),使用者多,資料全
用途
在編寫代碼的時候,我們可以發現很多內容都是不需要變化的,變化的只是一小部分內容,對不同的對象,這些內容不同。
如果我們需要產生一個變化的文檔,是否需要在代碼拷貝這些不變化的內容麼,或者把它剝離開放到其他的檔案去嗎?還有我們是否能對這些內容有一些簡單的控制和引用嗎?
簡單例子(主要規則:引用以$開頭用於取得什麼東西,而指令以# 開始用於做什麼事情)
#set($foo = false)
#if ($foo)
this is true
#elseif ($bar)
this is false
#elseif (true)
this should be followed by two blank lines
#end
## this is a single line comment
#*
this is a multi line comment
#if (
*#
#set($user = "jason")
#set($login = false)
#set($count = 5)
#if ($user == "jason")
the user $user is logged in!
#end
#if ($count == 5)
the count is 5!
#end
#if ($login == false)
the user isn‘t logged in.
#end
#if ($count != 3)
\$count is not equal to 3
#end
變數說明
在VTL中,所有變數標識符的開頭要加上$字元,如$Name,也可以用一種更加明確的方法表示,例如${name}。
變數標識符被映射到稍後即將介紹的VelocityContext對象。在模板引擎處理模板時,變數名稱(如name)被替換成VelocityContext中提供的值
C#代碼
Velocity.Init("nvelocity.properties");
VelocityContext context = new VelocityContext();
context.Put("list", Names);
Template template = null;
try
{
template = Velocity.GetTemplate("test.cs.vm");
}
catch (ParseErrorException pee)
{
System.Console.Out.WriteLine("Syntax error: " + pee);
}
if (template != null)
{
template.Merge(context, System.Console.Out);
}
注釋
單行注釋
## 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對模板引擎的一些參數進行配置。
【完美世界 http://www.23cat.com/Contents_51864.html】
【戮仙 http://www.23cat.com/Book_51960.html】
強大的模板引擎開源軟體NVelocity