T2の機能はJava5のアノテーションをコア技術として採用しています。 アノテーションとは、Javaの標準機能のひとつでクラスやメソッドにつける注釈のようなものです。 T2 はこのアノテーションを読み取って、実行時値を設定したり、あるメソッドを呼び出すか・呼び出さないかを決定したりします。 T2が使うアノテーションには大きく分けて3つあります。
従って、このアノテーションをソースコードに書いておくことで、 「このクラスはPageクラスなので、/hogeというURLの時に呼び出してほしい」ということや、 「このメソッドは、リクエストパラメータに"foo"という文字列があった時に呼んでほしい」というような事を、T2に伝えることができます。 3.1.規約 T2では極力規約は使いません.規約よりもアノテーションを重要視しています。 しかしながらミニマムレベルの規約は導入しており、下記のようになります。
3.2.アノテーション T2で使うアノテーションについて説明します。 3.2.1.クラスアノテーション ・@Pageアノテーション Pageコンポーネントであることを通知するアノテーション. T2では必須です。 属性は下記のとおりです。
@Page("hello")
public class HelloPage { ..... 3.2.2.メソッドアノテーション ・HTTPメソッドアノテーション HTTPメソッドアノテーションはHTTPメソッドをあらわします。HTTPメソッドアノテーションがついていると、そのHTTPメソッドでリクエストされたときだけ、アクションメソッドが呼ばれます。 以下のようなHTTPメソッドアノテーションがあります。各アノテーションをアクションメソッドにつけておくと、該当のHTTPメソッドのみでそのアクションメソッドが呼ばれます。
デフォルトでは、@GET/@POSTだけが使えるようになっています。 ・ActionPathアノテーション(org.t2framework.t2.annotation.core.ActionPath) ActionPathアノテーションはURL指定でメソッドが呼べるか呼べないかを指定するアノテーションです。
通常のHTTPメソッドアノテーションだけだと、ServletのようにHTTPメソッドが同じであればどのリクエストでも受け取ってしまうので、このActionPathアノテーションで制限を加えます。 属性は下記のとおりです。
・ActionParamアノテーション(org.t2framework.t2.annotation.core.ActionParam) ActionParamアノテーションは主にPOSTで使用され、submit時にname属性で指定された値が同一であれば指定したアクションメソッドが呼ばれるアノテーションです。
@ActionParamとつけることで、画面上に配置されたボタンと、Pageクラスのメソッドが1対1で対応するので直感的にわかりやすく、メソッドもアクションごとに分割することが出来ます。 属性値としては以下のものがあります。
・Defaultアノテーション(org.t2framework.t2.annotation.core.Default)
@Defaultは、該当Pageクラス内でどのアクションメソッドも呼ばれなかったときのデフォルトのメソッドを指定します。
T2ではPageクラスに対して、デフォルトメソッドを作ることを推奨しています。 ・Ajaxアノテーション Ajaxリクエストによって呼ばれるアクションメソッドを示すアノテーション(Version 0.5.1から)
・AMFアノテーション FlexまたはAIRからAMF通信(高速バイナリ通信)で呼ばれるアクションメソッドを示すアノテーション(Version 0.6から)
3.2.3.パラメータアノテーション @Index : サブミットされたボタンなどでForEach内のindexを取得するためのアノテーション
@Var : URL断片を取得するためのアノテーション @Upload : FileUpload?されたファイルを取得するためのアノテーション @Form : サブミットされてきたformをひとつのDTOで扱うときに指定するアノテーション 3.3.API 3.3.1.Navigationクラス NavigationクラスはT2のアクションメソッドの次の画面遷移先とその出力内容を決めるためのクラスです。 例えば下記のようになります。下記の例では、シンプルに/WEB-INF/pages/login.jspにフォワードしています。 @Default public Navigation index(final WebContext context) { return Forward.to("/WEB-INF/pages/login.jsp");
}
もう一つ具体例を見てみましょう。下記の例では、オブジェクトをJSON形式に変換してレスポンスに値を出力します。 @Default public Navigation toJson(WebContext context) { Hoge jsonObject = new Hoge();
}return Json.convert(jsonObject);
このようにNavigationは用途によって使い分けることで様々なレスポンスを返すことが出来ます。また、Navigationインタフェースを実装すれば独自のNavigationも簡単に実装できます。 Navigationは下記のようなインタフェースになっています。 @Published public interface Navigation { /**
}* Execute navigation processing. * * @param context * @throws Exception */ void execute(WebContext context) throws Exception;
現在T2であるNavigationの実装クラスは下記のようになります。
3.4.設定 3.4.1.web.xmlの基本設定 ・エンコーディング指定 リクエストのエンコーディング指定はT2のフィルタクラスによって行われます。 コンテキストパラメータに以下の値を設定することでエンコーディングをセットします。
<context-param>
<param-name>t2.encoding</param-name>
</context-param><param-value>UTF-8</param-value> ・T2の本体のフィルタ動作指定 T2の起点となる org.t2framework.t2.filter.T2Filterの設定オプションは下記のようなものがあります。
必須なのは、Pageクラスのあるルートパッケージの登録です.T2ではルートパッケージ以下サブパッケージも見て、Pageクラスのメタ情報を初期起動時に作るためです。
・設定のサンプル サンプルとして以下のような場合を考えてみましょう。
web.xmlの設定のサンプルは、下記のようになります。 <filter>
<filter-name>t2</filter-name>
<filter-class> org.t2framework.t2.filter.T2Filter</filter-class> <!-- ルートパッケージの指定 --> <init-param> <param-name>t2.rootpackage</param-name>
</init-param><param-value>examples.employee.page,examples.admin.page</param-value> <init-param> <param-name>t2.container.adapter</param-name>
</init-param><paramvalue>org.t2framework.t2.adapter.S2Adapter</param-value> <!-- 設定ファイルの読み込み --> <init-param> <param-name>t2.config</param-name>
</init-param><param-value>app.dicon</param-value> <!-- Pageの自動登録 --> <init-param> <param-name>t2.eagerload</param-name>
</init-param><param-value>false</param-value> 3.4.2.web.xmlのファイルアップロード設定
ファイルアップロード機能を使う場合、個別にフィルタを設定する必要があります。 フィルタクラスは、org.t2framework.t2.filter.MultiPartRequestFilter になります。 設定項目としては以下のようなものがあります。
設定サンプルは下記のようになります。 <filter>
<filter-name>uploadFilter</filter-name>
<filter-class>org.t2framework.t2.filter.MultiPartRequestFilter</filter-class> <init-param> <param-name>uploadMaxSize</param-name>
</init-param><param-value>100m</param-value> <init-param> <param-name>uploadMaxFileSize</param-name>
</init-param><param-value>100m</param-value> <init-param> <param-name>uploadThresholdSize</param-name>
</init-param><param-value>100k</param-value> <init-param> <param-name>uploadRepositoryPath</param-name>
</init-param><param-value>C:/temp/</param-value> 3.5.推奨プラグイン T2のサンプルを動かすために、以下のプラグインを推奨します。勿論あくまで推奨ですので使いやすいプラグインを使っていただいてもかまいません。 T2はどのプラグインにも依存しているわけではありません。 WebLauncherプラグイン : Tomcat/Jetty/SDLoaderをサポートしたWebコンテナブートストラップのためのEclipseプラグインです。 EclipseプラグインUpdateサイトは以下のとおりです.Eclipseのプラグインアップデートからお使いください。使い方についてはまた別途記載します. http://dev.handwerkszeug.org/eclipse/3.4/werkzeugkasten.update |