Home > 技術 > StrutsでResetを使わずにCheckbox問題を解決する方法

StrutsでResetを使わずにCheckbox問題を解決する方法

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されないのをうまく使ったトリックだが、保守性には少しかけるかもしれないのでご用心。

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, JavaScriptな情報をあなたに

Home > 技術 > StrutsでResetを使わずにCheckbox問題を解決する方法

Tag cloud
月別アーカイブ
Powered by
Powered by
Movable Type Commercial 4.261

Page Top