「Strutsは使われ始めてきた」という言葉を昨日耳にして、違和感を覚えました。それは、私の周りのMLやWebページではあたりまえのようにStrutsを耳にするからという理由だけではないような感じがしました。その場ではすぐ分からなかったのですが、一晩たって次のような言葉にまとめられます。Strutsを使う理由を探すときは過ぎ、Strutsを使わない理由を探すときなのだと。
特別な事情がないならStrutsを使うべきです。XML/XSLTでやりたいんだけど、Strutsではいまいち統合性が悪いというなら、別の方法を探しましょう。FlashやAppletをclientとする方法もあるでしょう。
「使われ始めてきた」という言葉にふさわしいのはVelocityかなと私は思います。でもその利点がまだ私にはつかめていません。JSPと同じようにVelocity templateで書けるなら、Velocityを積極的に使う理由にはなりません。何かVelocityじゃないと出来ないような技が沢山あればよいのですが。Turbineと連携したいという理由はその一つかな。
とらねこさんのところでVelocity-Struts連携のサンプルがあります。私の環境ではうまく日本語が表示できず(私の環境のせいかどうかも調べきれていない)、その理由を見つけてからと思ったのですがはや2週間も経ってしまい、ちょうどこの話題が出たのでちゃんとDLして動かしてますよというアピールをこめて、ここでもご紹介します。
JikesがWindowsでうまく動かないことについてとらねこさんにご指摘いただいきました。直すべきポイントまで教えてくれたのですが、すみません、Cは少ししか分からないので、私の手に余ります。でも、こんなことがすぐに分かるとらねこさんて、いったい何者なんでしょうか。
IDEA掲示板でも盛り上がっている通り、IDEAのearly access版を使っているのですが、素晴らしいです。今担当しているProjectが佳境なので、ホームページにfeed backできなくて申し訳ないのですが、その触りをここで。
自分の小人さんがPCの中に住んでいるようで、とってもコーディングがはかどります。その効果は、1週間に平日が1日あいた感じ、1日の就業時間が1時間あいた感じと言えば伝わりますでしょうか。もちろん、「あいた」時間もIDEAで開発しているわけで、その効果は複利となり増大の一途です。
まず、コーディング中のエラーチェックが素晴らしい。import文の自動追加は以前からもあったのですが、不要なimport文、文法エラーなどをエディタで色分けして教えてくれます。JavaDocコメントもエラーチェックしてくれるという優れものです。
Refactoring機能が素晴らしいです。各種renameに対応してます。パッケージ名・クラス名・メソッド名・パラメータ名などです。以前にもあったのですが、それに磨きがかかっています。プロパティの変数名をrenameすると、getter/setterも直してくれます。コメントも直してくれる優れものです。クラス名をrenameする場合、Javaではクラス名から動的に生成する機会が多いので不安ですが、文字列リテラルも変更してくれます。ですから、IDEAでrenameすれば、完全にrenameできます。
それから、JSPのtaglibやXMLに対応しました。Ctrl + SPACEで、補完してくれます。name spaceでCtrl + SPACEすると、elementが一覧され、閉じタグまで自動生成してくれます。しかも、省略不可能の属性があればそれまで生成してくれる優れものです。
VelocityをViewで使うんでしょうか。もちろんVelocityはViewのテクノロジーではありませんが、JSPの代わりに使うとなると、Viewの機能ですよね。となると、そもそもViewにロジックを沢山書いてよいかという問題が出てきて、Velocityのadvantageがつかめません。そこら辺を切り分けて、Javaオブジェクトとして実装するのではなくスクリプト内にVelocityを書くのは、どのような場面なのでしょうか。でも、mikiさんご推薦なので、がぜん興味が出てきました。
私はVelocityの第一印象はよくなかったのですが、使い出したらはまりました。Velocityを使うとJavaオブジェクトをスクリプトから参照できます。これがとても強力です。最近AnakiaとVelocityServletを組み合せて使っています。
Anakiaを使うとXML(のJDomオブジェクト)をVelocityスクリプトからXPathを使って参照できます。マクロもJavaにない機能なので便利。Velocityは文法は小さいけど懐が深い。
しつこくてすみません。Velocityの一番良いところは、Javaを操作しているのにも関わらずスクリプトに一切Javaのコードが現れないことです。ピリオド。
Anakiaもいいですが、DVSLとかXSLTライクで良さげですね。あと、Velocity-Struts連携の日本語サンプルは、暇な時に確認しておきます。
http://xion.s11.xrea.com/pub/java/kpj/で拙作のライブラリKLPを公開しています。Taglibもスクリプトも使わないこういうアプローチもありかもしれません。
Velocityを使い出したきっかけは、JSPやServletの代わりとか、そういうのではなくて、GUIのカスタマイズの手段として誰でも使える簡単なテンプレート言語、しかもWebに依存しないもの、が欲しかったからです。GUI記述言語の候補としてXFormsやXULが候補としてあったのですが、XSLTやRDFは専用のツールやエディタがなければとても素人が使いこなせるものではありません。結局、現在のところXULでGUIを作り、カスタマイズはVelocityという形に落ち着いています。DVSLにもとても興味があります。そのうち触ってみたいと思います。
私がVelocityServletを使っていると書いたのは、GUIプロタイプをWeb上で作っているからです。アプリをEARファイルにして、JBoss上にデプロイして、といった使い方をしています。Anakiaを使っていると書いたのはプロパティファイルの定義手段としてXMLを使っているからです。本来のAnakiaを使い方ではないですね。
Velocityを使う気になったのは、ChibaというXFormの処理系と、LuxorというXULの処理系(両方ともJava)を調べていて、両方ともVelocityをテンプレート言語として採用、もしくは採用しようとしていたから興味を持ったからです。複数の信頼できそうなソースから参照されていると「何で」という気になってきます。
「そもそもViewにロジックを沢山書いてよいかという問題」について。Velocityで扱うのはプレゼンテーションを作成するためのロジックです。if文やfor文があっても、それは見た目を表現するための手段であってビジネスロジックを構築するものではありません。たとえば、ある変数の値が最大値を超えたら赤い文字やイメージで警告を表示する、という問題の場合、その表示ロジックはViewの中にあってよいと思います。Velocityの基本型は、HTMLタグの属性値や値として$attributeInfo.desciptionのようなVelocity変数を直接埋め込めることです。これは、Webデザイナにとっては、JSPやServletに比べ非常に直感的な表現方法だと思います。凝ったUIの場合はif文やfor文も使うでしょうが、それは星マークを10個並べて書きたいといか、そういう手段に使うのだと思います。たびたび、長文にて失礼。
Struts-Velocity連携で viewにVelocityを使っています。<br>HTMLのコーディング内に<br><!-- #set($data = 1) --><br><br>見たいな風にHTMLのコメントアウト部分に<br>VelocityTemplate を書くことでレイアウト<br>を壊さずに埋め込める点にJSPより優位性を感じました。<br><!-- #foreach($c in $roop) --><br>$c <br><br><!-- #end --><br>ループにしても、問題なく埋め込めます。<br>これは、ロジック作成とデザイン作成の分離に<br>とっても役に立ってます。<br>vm ファイルを直接ブラウザで見たり、HTML作成IDEソフトで編集<br>できたりします。