例えば以下のような処理があったとします。
何らかの項目を、複数ページに渡って選択しながら削除する処理です。
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 件のコメント:
コメントを投稿