checkboxにチェックしていないことを送信

久しぶりにクライミング以外の話題。

まぁ当たり前なのだけど、HTMLのcheckboxでformを送信するとき、checkが入っていないとサーバーに値自体送信されない。
このため、例えばサーバー側で情報をセッション領域などに入れて持ちまわす場合、
一旦チェックを入れた状態を保持してしまうと、それを外すことが画面からの操作ではできなくなってしまう。
その問題の解決には、Springではcheckboxと一緒にhidden項目を作って、それを一緒に送信するのがセオリーみたい。

<input type="checkbox" value="true" name="springCheckboxTest" id="springCheckboxTest">
<input type="hidden" value="on" name="_springCheckboxTest">

こんな感じでcheckboxのnameの先頭にアンスコつけたnameのhidden項目を送信すると、
勝手にspring側でバインドしてくれるみたい。

そして、上記のようなhtmlはspringのformタグを使えば出力可能とのこと。

<form:checkbox path="springCheckboxTest" />

参考:13.9.4. The checkbox tag

なるほどね!