待望のVelocityアップデートがリリースされました:テンプレートが少し簡単になりました

テンプレートエンジンの新機能の概要



2008年12月1日に、Apacheは新しいバージョンのVelocityテンプレートエンジンのリリースを発表しました。これは長い間更新されておらず、番号1.6でした。 プロジェクトでVelocityを使用する人は、新バージョンに登場した新機能について喜んで学ぶでしょう。 Velocityを使用しない人は、新しい便利なツールを発見するかもしれません。



クイックリファレンス



Apache Velocityは、多数のJavaライブラリで構成されるソフトウェア製品です。 この製品は、Apache Software Foundationによって開発およびサポートされており、 Apache License 2.0の下でオープンソースソフトウェアとして配布されています。 製品の主要コンポーネントはVelocity Engineです。これは、テンプレートに基づいて出力テキストを生成できるライブラリであり、口語ではテンプレートエンジンと呼ばれます。



テンプレートエンジンが必要な理由



一般に、テンプレートエンジンはWeb開発で最も広く使用されていますが、最も簡単な方法は、レターのテキストの形成の例でそれらの使用の利点を示すことです。 ユーザーベースがあり、新製品の発表を送信するとします。 テキストは標準であり、製品の名前、日付、および名前のみが変更されます。 ノートブックを開いて次のように書きます



$customer.name



" " , $product.name ! .



$date



" "








ご想像のとおり、$ customer.name、$ product.name、および$ dateが変数であり、代わりに、出力テキストを生成するときに実際の値が置き換えられます。 問題は、これらの値をテンプレートに渡す方法ですか? これは非常に簡単です。 Javaソースコードでは、次のように記述します。



VelocityEngine velocity = new VelocityEngine();

velocity.init();



Template letter = velocity.getTemplate("letter.vm");



Date now = new Date();

Product product = someDAO.getLatestProduct();

List<Customer> customers = someDAO.getCustomers();



for (Customer customer : customers) {

VelocityContext vc = new VelocityContext();

vc.put("customer", customer);

vc.put("product", product);

vc.put("date", now);



StringWriter sw = new StringWriter();

letter.merge(vc, sw);

//









ご覧のとおり、ここでは特に洗練されたものはありません。それぞれ独自のキーの下にあるJavaオブジェクトは、基本的に通常のMapであるVelocityContextのインスタンスに配置されます。 コンテキストとテンプレートをマージするプロセスで、エンジンはテキスト内の変数を検出し、その名前をキーとして使用し、対応するオブジェクトをマップから抽出します。 テレマーケット!



もちろん、HTMLページを生成するためにテンプレートを適合させるのに問題はありません。多くの人はこれを成功裏に行い、大部分がhemo核JSPテクノロジーの歴史のゴミ箱に入れました。 VTLテンプレート言語の詳細な説明とその使用手順は、開発者のWebサイトで見つけることができます。



しかし、それはすべて背景でした。 そして今、実際の新しいバージョンについて。 開発者を喜ばせるために、1.6には多くの待望のグッズが登場しました。 それらを順番に考えてみましょう。



1.ディレクティブ#evaluate



シンプルで実物そっくりの例を次に示します。記事のテキストがデータベースに保存されているとします。 途中のどこかで、たとえばオンライン投票の結果など、いくつかのライブデータを挿入したいと思います。 これは難しくありません。テンプレートファイルを正しい場所に接続するだけで、結果がHTML形式で表示されます。



#parse("poll.vm")







ただし、問題は、記事のテキストを通常の変数($ article.text)として配置すると、その内容がページ上にそのまま表示されることです。 つまり、美しい図の代わりに、読者にはわいせつな#parse( "poll.vm")が表示されます。 必要な効果を実現するには、記事のテキストをテンプレートコードとしてVelocityに何らかの方法で解釈させる必要があります。 以前のバージョンでこれを行う数少ない機会の1つは、Velocity ToolboxのオプションのRenderToolコンポーネントを使用することでした。 それは、原則として、我慢できましたが、やや不便でした。 1.6のリリースにより、これを1行で行う機会が得られました。



#evaluate ($article.text)







2.ディレクティブ#define



このディレクティブはマクロのように機能しますが、ヘルプで定義されたテンプレートコードの一部をその場で呼び出すだけでなく、コンテキスト変数に割り当てて必要な場所で使用できる点が異なります。



#define($block)Hello $who#end



#set($who = 'World!')



$block








実際にそのような設計が必要ですか? それほどではありませんが、そうであれば、より自然な方法で実装できるものがあります。 たとえば、テンプレート多型のようなもの。



3.ディレクティブ#break



些細なことですが、素晴らしいことです。#foreachサイクルから1行でジャンプできます。 Velocityが制御ロジックを表現するために持っていたわずかな手段で、まったく新しいディレクティブを追加することはすでに大きなブレークスルーです。



4.マクロをファイルに整理する機能



古いVelocityの厄介な制限の1つは、マクロファイルのハードコードされた場所でした。 これで、マクロを自由に編成し、必要に応じて接続できます。



#parse('mymacros.vm')







結論の代わりに



このレビューでは、Velocity Engineバージョン1.6に登場した最も興味深いイノベーションが検討されました。 エンジンの新機能の詳細については、製品のWebサイトの変更セクションをご覧ください。



まあ、要約すると、私は仕方がありません:「人生は良くなり、人生はもっと楽しくなりました!」







All Articles