一覧表示画面の実装はwisdomx.logic.formtemplate.AbstractPageListGeneratorクラスを継承して作成します。
このクラスの役割は
"ParameterInputFormから使用する検索条件を取得して、SQLを発行、検索結果画面のIPageListインターフェースを生成する"
です。原則SQL SELECT文の組み立てと実行部分のみを含みます。
このクラスを実行するコマンドクラスで行うことは「画面入力値をParameterInputFormに保存し、このクラスに渡す」だけです。
ただし、戻り値のIPageListの実装クラス(FullRowsPageList、あるいはPerPageRowsPageList)の型はコマンドクラス側も知っておく必要があります。
例)コマンドクラスがAbstractPageListGeneratorのクラスを呼び出し
ParameterInputForm pif = new ParameterInputForm(); pif.addString(rp.getString()); IPageList page = new UserListPlg(pif,rh).generate();
このクラスの利用者が、generate()メソッドを実行すると、抽象メソッド_generate()が実行されるので、このクラスはこのメソッドを実装します。
実装は単純で、PreapredStatementを作成し、wisdomx.ui.builder.StatementPageListBuilderクラスに渡すだけです。StatementPageListBuilderは1ページに含める行数と、開始ページインデックスを渡すと、内部でSQLを実行し、ResultSetオブジェクトをFullRowsPageListあるいはPerPageRowsListに置換したものを作成します。またページ制御で使用するイベント名を出力するのに、IPageListDecoratorのインスタンスも必要です。(IPageListDecoratorについてはここでは触れません。)
IPageListBuilder pageBuilder = new StatementPageListBuilder(builder.buildStatement(), Factory.getPageDecorator()); return pageBuilder.buildFullRowsPage(Factory.getPerPageRows() ,pageIndex);
このクラスの実装の中心は「正しいSELECT文を生成する」ことが中心です。
たとえば、入力必須の項目がある場合など、検索を実行する前に入力値の検査が必要な場合も想定されます。
その場合には、AbstractPageListGenerator#_valiate()をオーバーロードして実装します。コマンドクラスからは、publicなメソッド validate()を実行すると、_validate()メソッドが呼びだれます。
例)コマンドクラス側の検査の制御
ParameterInputForm pif = getInputForm(); pif.getValue(USER.USERID).setValue(rp.getString(USER.USERID.getId()+"_","")); pif.getValue(USER.USERNAME).setValue(rp.getString(USER.USERNAME.getId()+"_","")); AbstractPageListGenerator plg = new UserListPlg(pif, rh); if ( plg. validate() ) { IPageList page = plg.generate(); } else { }
例)AbstractPageListGeneratorの_validate()メソッドの実装
protectecd boolean _validate() throws Exception { String userid = qf.getValue(USER.USERID); if (StringUtil.isEmpty(userid)) { qf.addErrorMessage("ERR0010"); /* このコードにより、ParameterInputFormにMessageが格納されるので、JSPでエラーメッセージ表示に使用されます。*/ } return qf.isError(); }
単純なSQLで済む検索であれば、このクラスは実装せずにコマンドクラスで一覧作成を実装したほうがシンプルな場合もあります。