2008年8月13日水曜日

AbstractWizardFormController(以下AWFC)で中間のページをスキップする方法

例えば以下のような処理があったとします。
何らかの項目を、複数ページに渡って選択しながら削除する処理です。

1.条件抽出
2.表示・選択
3.詳細確認
4.削除

こういう時SpringではAWFCを使います。

でも3の詳細確認をスキップしたいケースもままあるでしょう。別に詳細を見たくない。そのまま削除しちゃいたい。

運のいい人は単に2つ目の画面でtype="submit" name="_finish"すれば出来てしまいますが(どういう人が運がいいかは後述)、ハマってしまうとややこしいことになります。
以下の投稿者はハマってしまった人のようです。AWFCのいくつかのメソッドをオーバーライドしてスキップさせるように作りこんだそうです。

Skip to _finish in a AbstractWizardFormController

しかし_finishまで処理を飛ばすもっと簡単な方法があります。

それは全てのBean(=command)に対応する全ての項目を、_finishにスキップさせるページにhiddenか何かで埋め込んでおくことです。

どうやらAWFCは、Bean(=command)に含まれている全ての項目が画面経由で埋められていないと、次に進ませてくれないようなのです。
(AWFC内部のチェックで引っかかり、強制的にshowFormでカレントのページに戻されてしまう)

逆を言えば、Bean(=command)の項目を無害な値で埋めてしまい、_finishで無視すればよい、それだけのことでした。

以上。

0 件のコメント: