NVelocityテンプレートエンジンvs StringTemplate

3294 ワード

NVelocity 1.1、StringTemplate 3.2、ASP.NETのASPXページは個性エネルギーテストの比較を行い、比較結果は以下の通りである:結果は、2台の異なる機械で、ASPX:StringTemplate:NVelocityはそれぞれ1.00:8.53:1.61と1.00:7.34:1.71であり、StringTemplateの性能は最も弱く、NVelocityはASPXの解析効率に少し近い.
私はAspが好きです.Net MVCでNVelocity View Engineを使用する重要な理由の一つは、NVleocityの簡潔で使いやすい文法です.ほぼ#set,#if,#foreachを用いて完全なアプリケーションを構成することができ,NVelocityにおける文法や常用命令について紹介する.
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[arg 2...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
適用方法:
まず、次の名前空間を導入します.using Commons.Collections; using NVelocity; using NVelocity.App; using NVelocity.Context; ステップ1:VelocityEngineのインスタンスVelocityEngine velocity=new VelocityEngine();//パラメトリック関数付き直接インスタンスも使用できます.ExtendedProperties props = new ExtendedProperties(); velocity.Init(props);
ステップ2:テンプレートファイルをロードするときにTemplateクラスを通過し、VelocityEngineのGetTemplateメソッドを使用してテンプレートTemplate template=velocityをロードします.GetTemplate(@"path/to/myfirsttemplate.vm");
ステップ3:統合テンプレートVelocityContext context=new VelocityContext();context.Put("from", "somewhere"); context.Put("to", "someone"); context.Put("subject", "Welcome to NVelocity"); context.Put("customer", new Customer("John Doe") );
ステップ4:テンプレートの内容を出力するIOストリームを作成します.StringWriter=new StringWriter()は、templateにstring形式で格納されているため、StringWriter=new StringWriter()を使用することを推奨します.template.Merge(context, writer); Response.Write(writer.ToString());