- 2008-06-26 (木)
- 技術
Strutsを使っていて且つスコープをSessionにしている場合に結構問題になってくるのが、checkboxを外したときのHTTPPostについてだと思う。
HTTPの仕様でチェックがついていればvalueがPostされ、チェックがついていない場合はうんともすんとも言わない。
これを解決する方法としてStrutsが用意しているメソッドがresetメソッドだ。
resetメソッドを使うとActionFormのセッターが動きだす前に初期化することができる。
もしスコープをRequestにしているなら毎回インスタンスが生成されるので問題はないが、Sessionだとresetメソッドを使ってcheckboxに対応したプロパティを初期化する必要がある。
resetメソッド
public void reset(ActionMappingarg0, HttpServletRequestarg1) {
this.checkboxVal = "false";
}
でも独自に実装したStrutsや、resetメソッドを呼ぶことができない場合にはこれまたやっかいになる。
チェックボックスのonclickイベントで別に用意したhiddenに値を格納し、なんとかサーバーサイドで判断することも可能だがこれだと面倒すぎてcheckboxを使いたくなくなるw
これを簡単に解決してくれるのが、同じActionFormのプロパティを持つhiddenを使う方法だ。
JSPの書き方
<html:multibox name="setterCheckForm" property="setterCheckBase.hogehoge">checked</html:multibox>aaa <nested:hidden property="setterCheckBase.hogehoge" value="unchecked"/>
ここで重要なのがcheckboxやmultiboxは必ずhiddenより前に書くこと。推測だがPostされたときのメッセージボディに並べられた順番にStrutsのセッターが動き出すので、もしhiddenが最初に書いてあるといつまでたってもcheckboxのほうがセットされなくなってしまう。
たったこれだけでチェックが入っていればcheckedがPostされ、チェックが入っていない場合はuncheckedがPostされる。
チェックが入った場合にPostされないのをうまく使ったトリックだが、保守性には少しかけるかもしれないのでご用心。
【関連する記事】
- Newer: Safariを使って-webkit-box-shadowでシャドウを付ける
- Older: プログラマが席を立つときってどんなん
Comments:0
Trackback:0
- TrackBack URL for this entry
- http://hisasann.com/cgi-bin/mt/mt-tb.cgi/1054
- Listed below are links to weblogs that reference
- StrutsでResetを使わずにCheckbox問題を解決する方法 from HouseTect, JavaScripter Blog

