というか、こんな機能あることを知らなかったというくらい記憶から消えていた。
WOFormのactionにはそのフォーム内でのデフォルトのアクションをバインドするものだと思っていた。私が使うのはフォーム内のJavaScriptを使ってサーバーで処理を実行するときなんかにFormのsubmitを使ってここにバインドしたアクションを呼び出していた。
ところが、昔(と言っても半年くらい前だ)では、ここにエラーチェックをするアクションがバインドされていたのだ。そしてそのWOFormで囲まれた中のsubmitボタンを押すと、どれを押しても必ずそのそこにバインドしたアクションが実行される。そしてその処理の後、実際のsubmitボタンにバインドしたアクションが実行されていた。
今回、処理を変更してデフォルトの値を別の所で代入するのでエラーチェックが必要なくなったのだが、こういう仕組みになっているとまったく気がつかなったので、目的の処理が呼び出される前に、エラーチェックルーチンが呼ばれてエラーになってしまい、先に進まないのではまってしまった。なにしろ目的の処理の中で代入しているので、エラーチェック時には値が入っていないのだからエラーになるのは当たり前。でも、コードだけを見るとその処理はどこでもよんでいない。悩みました。
普段ならこのようなどのアクションを実行する前にも行いたい処理は、takeValuesFromRequest()中で書いていたのになぜこの時だけ、WOFormのactionにバインドしたのか?謎です。偶々誰かに教えてもらったのか?
でも今後はこんな後で追いかけにくい方法は使わないだろうなあ。