強大的模板引擎開源軟體NVelocity

來源:互聯網
上載者:User

標籤: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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.