(停止)■S2i18nProject■Wiki更新履歴editTeedaTeedaの入門記を書きます。blogで書いていたけど、皆で書けるように。以下ではteeda-ex1プロジェクトを作成済みであるものとして説明します。†TeedaはJSF実装をベースにしたWebアプリケーションフレームワークです。Teedaは大きく分けて2つのpartがあります。Extensionを共に使っていただく使い方です。Coreだけでも純粋なJSF実装としてお使いいただけます。_)mでは本題に戻りまして。ExtensionはPage駆動アーキテクチャに基づいていて、記述するのは基本的に以下の2つだけです。・Pageクラス(ただのPOJOクラス。クラス名をPageで終える必要がある)・HTML(基本的にidをふるだけ。)1HTMLファイルに対して、1Pageクラスが対応します。この辺はサンプルを見つつ、学習するのがよいと思うので、次節以降解説します。Worldで基本的な動きをつかんでみましょう。/><title>Hello</title></head><body>Hello&nbsp;World!!!</body></html>このシンプルなHTMLをPageクラスとマッピングさせてみましょう。HTMLの方は簡単です。Mappingして動的に変えたい項目にidをつけたタグを振るだけです。Worldと表示されます。これに対応するPageクラスを作成しましょう。Pageクラスを作成するときには、EclipseプラグインDoltengを使うと便利です。teeda-ex1プロジェクトの作成が終わっているものとして説明します。teeda-ex1プロジェクトのhello.htmlのソースを開いて、HTMLソース上でCtrl+5を押してみましょう。なにやらダイアログが表示されます。このダイアログでPageクラスを作成することができます。DoltengではHTMLの内容を読み込んで、Pageクラスに必要そうなプロパティを自動的に追加したPageクラスを作成してくれます。QuickJUnitにおけるCtrl+9でテストクラスへの移動が出来るようにCtrl+5でDoltengではPageクラス←→HTML間を移動できます。(Pageがない場合にダイアログが表示されPageクラスを作成するかを聞いてきます。)ここではダイアログで単に「Finish」ボタンを押して、Pageクラスを作成して下さい。HelloPageクラスが作成されます。作成されたPageクラスのプロパティnameに"Seasar2"と入力しておきましょう。name;}}これで準備は整いました。Seasar2と表示されます。ひとつひとつ見ていきましょう。Teedaの基本は全てidです。idがない場合全て単なるテキストとして処理されます。上記の例で言えば、spanタグにnameというidをふることであ、このタグは動的な値を扱うのだとTeedaは解釈します。そのリファレンスも十二分に準備する予定です。動的に出力する項目(outputText)はどのように実現するのでしょうか。spanタグでidをふるだけ。id="aaa">bbb</span>で、Hoge.htmlが読まれるとHogePageクラスのaaaプロパティが上記で書かれている値(bbb)の代わりに出ます。次回は入力(inputText)を見てみましょう。忘れちゃいけない配置についてお話しておきます。Teedaは基本的に、Seasar2.4の配置に基づいています。2.4でのPageクラスなどの構成は以下で書いたので割愛。余談ですが、このようにパッケージ構成を決めることで煩雑だったDIの設定部分を取り除いているのです。S2.4は、diconをいじる必要がほとんどなく、パッケージ構成を初期情報として与えるだけで終わりです。かんたん^^http://d.hatena.ne.jp/shot6/20060818#1155832996これと同様に、HTMLの配置は以下のようにします。-各HTMLサブアプリケーションとは1ユースケースと同等です。-hello.htmlとなります。Teeda(というかS2.4の規約)ではデフォルトは/view以下を対象のHTMLとみなして処理します。前回までにoutputTextはやりました。今回はinputTextをやりましょう。inputTextも非常に簡単です。通常のinputで、typeにtext、idをarg1のようにPageクラスのプロパティ名をつけるだけです。親クラスで記述しておくことも可能です。出力、入力と来たので、あとはsubmitボタンを説明すれば簡単なアプリを作ることが出来ます。いうわけでボタンです。ボタンは今までと違い、ちょっとした規約があります。いってもHTML上では相変わらずidをふるだけです。ボタンには3種類あります。dogojumpです。do系のボタンは、それに該当するPageクラスのメソッドが呼ばれます。doCalculateというidをつけておくと、Pageクラスの同様のメソッドが呼ばれます。null;}ではこれでどのような画面遷移が発生するのでしょうか?実はdoCalculateメソッドの戻り値が次の画面遷移先になっています。そのため、doで呼ばれるメソッドはStringの戻り値を持たなければいけません。nullの場合、画面遷移は自画面に戻ってきます。メソッドの実行後に別の画面に遷移したいときはどうすればよいのでしょうか?簡単です。"addResult";}Stringの戻り値で次のPageクラス名を指定すればよいだけです。同一サブアプリケーション内(たとえば/view/addの以下)であれば、"addResult"のようにHTML名をかいてもらえばそれだけで遷移します。別サブアプリケーションに遷移する場合は?/view/aaa/from.htmlと/view/bbb/to.htmlとすると、fromからtoへの遷移は、bbb_toとなります。/view以下からサブアプリケーションを含めて記述してください。その際にアンスコでパッケージを区切るように記述します。これはgoでもdoでもjumpでも変わりません。非常に直感的なのがよくわかってもらえると思います。HTMLからも、どのメソッドが実行されるかが瞬時にわかります。本来見なくてもよいリソースにどこに遷移するのかを見に行かねばいけません。Teedaではもっとも画面遷移に関係あるリソースにそのまま記述できるようにしています。†では、次はgoについて説明します。goはdoのように特定のメソッドが呼ばれるわけではありません。Aという画面からBという画面にロジックを通さずに直接行きたい場合などがあると思います。そのような場合にgoを使います。下記のaaa.htmlは、同一サブアプリケーション内のaaa2.htmlに直接遷移します。†では、画面遷移最後のもうひとつはjumpです。jumpはgoと同じようにロジックを通さずに画面遷移するための機能です。違いは何でしょうか?goとjumpには大きな違いがあります。それは画面遷移時にValidationがあるか、ないかです。doの場合は当然あるのですけど、goの場合も値のValidationは行います。jumpの場合は値のValidationは行わずに画面遷移します。下記のような足し算の計算後の画面(addResult)があったとして、ただ単に戻るボタンを実装したいなどの場合はjumpを使うのがお勧めです。次はValidationについてです。画面遷移時にValidationについての話が出てきました。どのようにPageクラスのValidationをするのでしょうか。こちらはS2JSFやS2Strutsを使ったことのある人なら馴染みのある方法を採用しています。定数アノテーションとTigerアノテーションです。TeedaはJDK1.4に対応しているため、定数アノテーションでも使えます。Tigerアノテーションでも使えますが、まずは定数アノテーションを使ってみましょう。定数アノテーションの記法は以下のようになっています。"Validatorの各プロパティの設定";例えば、下記のような足し算の入力画面のPageクラスがあるとします。このクラスでは、引数にarg1とarg2をとり、両方とも入力必須で桁数が3桁以上入力されなくてはいけないとします。arg2;}}このような場合にどうすればよいのでしょうか。上記の記述を思い出しながらやってみましょう。プロパティarg1に必須項目のValidatorをしかけましょう。どんなValidatorがあるのか今は気にしないでください。あとできちんと明記します。null;というようになります。所定のValidatorに与えるプロパティがnullの場合は上記のようにしてもらえればよいです。これでarg1に必須チェックがかかります。標準のValidatorにLengthValidatorというValidatorがあります。今度はLengthValidatorのプロパティにきちんと値を渡さなくてはいけないですね。最小の桁数が3桁なので、minimum=3というプロパティを渡します。"minimum=3";さあ、これでValidationがかかります。同じようにarg2でもValidationをかけることが出来ます。先ほど示した例はこのようになります。arg2;}}このようにValidatorをしかけていきます。Validatorは各プロパティごとに書かれた順番どおりに呼ばれます。上記の例だと、arg1はTRequiredが呼ばれて、その後にLengthValidatorが呼ばれます。Tigerでも同じ仕組みで行われます。この例は各Validatorを説明した後に書きたいと思います。次は各Validatorについて見ていきましょう。次は各Validatorについて説明します。Faces)で決められている画面からの入力値をチェックする機能です。JSFとしても提供しているValidator、Teedaで提供しているValidatorがあり、Tで始まるやつはTeedaで用意したものになっています。正規表現でのチェック上記のように数値チェック系は多少かぶっているのもあります。それは以下のような機能を付け加えるためです。どのボタンを押したときにValidationをするかを指定できるようにするためメッセージを出力するためのidを自由に変更できるようにするためです。下記のように、target属性でどのボタンが押下されたときにValidationが発生するのかを制御することができます。"target=doCalculate";本当は正規表現のValidatorもCommons-validatorみたいにひととおり準備してあげればいいんですけど、まだそこまでいってないです。相関チェック系TGreaterEqualValidatorTGreaterThanConstantValidatorTGreaterValidatorTLessEqualValidatorTLessValidator相関チェック系では、主に2項目の関係でのチェックを行います。JSF上、どいつとペアでValidationするのかはHTML上出てくる項目の後者につけなければいけません。S2JSFのときにはGreaterEqualしかなかったのでTeedaではひととおり準備してみました。簡単な足し算アプリを作成してみましょう。未入力または桁数が3桁に満たない場合は、Validationエラーとします。HTMLはこのようになります。