そのアクションクラスで使用するデータベースアクセスクラスである
Persisterはインスタンスフィールドに定義しておくと
アクション実行前にそのPersisterで使用する接続がセットされて
すぐにデータベース操作を行う事ができます。
public XXXAction extends ServiceAction {
@Connector("somedatabese") // デフォルト接続を使用する場合は不要
@TableDEF("account")
private BasicPersister persister;
public Object execute() throws Exception {
// 検索条件をセットしていないので全件検索を行う
return persister.select(null);
}
}
共通で使用するアクションを作成して他のアクションから実行することができます。
使用するアクションもインスタンスフィールドに持つようにします。
public class XXXAction extends ServiceAction {
// OtherActionはServiceActionのサブクラス
OtherAction otherAction;
public Object execute() throws Exception {
Object result = otherAction.execute();
...
}
}
アクション実行前に新規に作成したインスタンスをotherActionにセットし、
そのインスタンスに対して次のセットアップ処理を行います。
- @ContextParam注釈されたフィールドのパラメータセット
- @FieldDEF (validation = true)で指定したフィールドのバリデーション
- 使用するPersisterの接続のセット
- さらにそのアクションで使用する他のアクションのセットアップ
これによりアプリケーションは何も考えずに別のアクションを実行することができます。
アクションの実行は呼出し元のアクションと同一トランザクションで行われます。
注意する点としては
絶対にpostprocessメソッドを呼び出さない
ということです。
トランザクションとは関係ありませんが、
クライアントから渡されるパラメータの取得方法を述べておきます。
(詳細はJAXSONのドキュメントを参照してください。)
アクションクラスのフィールドが
@ContextParam
注釈されている場合、
そのフィールドにクライアントから渡されたパラメータをセットします。
セットされる値はそのフィールド名に等しいパラメータです。
値はそのフィールドの型に変換されますが、
変換できない場合はそのフィールド型のオブジェクトを生成して
そのクラスのフィールドに対してパラメータをセットしようと試みます。
public class XXXAction extends ServiceAction {
// accountNameというパラメータの値がセットされる
@ContextParam
String accountName;
// FormBeanオブジェクトを生成してそのオブジェクトに対してパラメータをセットする
@ContextParam
FormBean formBean;
...
}
public class FormBean {
// ここにパラメータをセットする
@ContextParam
String accountName;
...
}