ライブラリのダウンロードと設定
以下のサイトからダウンロードして下さい。
クラスパスには、"velocity-1.6.4.jar"を追加しておくとよいでしょう。
Velocityの仕組み
利用方法はとてもシンプルです。まず、Templeteとなるファイル(拡張子はvm)を用意し、そこにVelocityの命令文法に従ってテンプレートを記述していきます。Velocityの文法と言っても身構えることはなく、通常のテキスト文の中に命令文法を記述するだけです。その特徴は以下のとおりです。
- 変数は頭に$を付ける。任意の位置に記述することが可能。
- foreach, if 文等の繰り返しや条件分岐の処理ができる。
- Velocityの命令文法を記述した行は先頭に#を付ける
テンプレートファイルの書き方
ここではJSON形式のファイル作成を対象としてみます。
{"name": "$user.name", "age": "$user.age"}
Javaの記述の仕方は以下のようになります。
StringWriter w = new StringWriter(); //マッピングするデータをクラスに格納 testUser u = new testUser(); u.setName("おち"); u.setAge(20); Velocity.setProperty(Velocity.RUNTIME_LOG_LOGSYSTEM, new JdkLogChute()); Velocity.setProperty(Velocity.INPUT_ENCODING, "UTF-8"); Velocity.setProperty(Velocity.OUTPUT_ENCODING, "UTF-8"); Velocity.init(); // 初期化 VelocityContext context = new VelocityContext(); //テンプレートとのマッピング context.put("user", u); //テンプレートファイルの指定 Template template = Velocity.getTemplate("/WEB-INF/test.vm", "UTF-8"); //実行。結果はwに出力 template.merge(context, w);補足しますと、上記のプログラムはテンプレート内の変数とJava内でのデータ変数をクラスの受け渡しによりマッピングさせていることがわかります。
今回はシンプルなJSONを例にしましたが、
これをみて思うのはJSPと何が違うのかということですが、まあVelocityのほうはあくまでもTemplateエンジンとしてシンプルな枠組みになっているような気がします。JSPはあれもこれもいろいろできてしまうわけで、、、
個人的には、XMLとかJSONとかのフォーマットをServlet等で出力する際に、print文とか使ってコード内にガガガッと書かれるのは勘弁してほしいなと思っていたので、VelocityみたいなTemplateエンジンは魅力的なだなぁといまさらながら感じた次第です。
追記:注意事項
上記のサンプルで、testUserというデータクラスを用意していますが、このデータクラスは必ずpublicなものにして下さい。ここをうっかり忘れてて、テンプレートに反映されないという自体に何回か繰り返したので、自分用のメモ追記です。
0 件のコメント:
コメントを投稿