良くある説明では、チェックボックスのOFFをFormに反映させるためといったものだ。
自分はチェックボックスのOFF対策は別の方法で対応しているので、あんまりresetメソッドは使うことがなかった。
で、今回、Formの内容の初期化にresetを使ってみようと思って実装してみた。
デバッグ上は、ちゃんと初期化してくれてて、うまく行ったようだったのだが、結果は以前の値を持ったままだった。
よって、resetについてもうちょっと調べてみた。
そこで、seasar2でのresetメソッドの説明を読んでみた。
チェックボックスや 複数選択リストは、選択された値だけがリクエストで送信されます。 何も選択しなかった場合は、何も送信されません。 そのため、アクションフォームをセッションで管理している場合、 チェックボックスや複数選択リストで選択状態をすべて解除しても 何もリクエストで送信されないため、元の状態のまま残ってしまいます。
この問題に対応するために用意されているのが、 アクションフォームのリセットメソッドです。 リセットメソッドは、リクエストパラメータをアクションフォームにセットする直前に呼び出されるため、 リセットメソッドで、チェックボックスや複数選択リストのプロパティを選択されていない状態に更新することで、 リクエストで何も送られてこなかった場合でも、選択状態を解除することができます。
と、書いてある。
注目したのは、
リセットメソッドは、リクエストパラメータをアクションフォームにセットする直前に呼び出される
という部分。
なるほど、さっきは初期化はしてるのだけど、結局また値がセットされてたのか。
というわけで、初期化メソッドはActionから呼ぶようにしたら期待通りになった。
要は初期化のタイミングの問題。
resetメソッドは、チェックボックスや 複数選択リストのOFF検知用と思ってたほうが良さそうだと思った。