読者です 読者をやめる 読者になる 読者になる

TMD45INC!!!

tmd45++; // Deprecated

Struts で checkbox フォームの値を取得する際には注意が必要

Java Struts html form checkbox

先達の資料はたくさんあるので、私はそれをいつか消されてしまわないようにコピーして回ってるだけな感じですがメモ。

HTMLではCheckBoxをオンにした時しか値を送信してくれません。
これだとチェックオンからオフに変えてもFormのセットメソッドは呼ばれず値が更新されません。

CheckBoxイケてない。 - A Day In The Life

W3C の checkbox 仕様がそうなってるらしい。ほんとだ。

checkboxes
Checkboxes (and radio buttons) are on/off switches that may be toggled by the user. A switch is "on" when the control element's checked attribute is set. When a form is submitted, only "on" checkbox controls can become successful.

Forms in HTML documents

日本語に訳すとこんな感じ。

checkboxes (チェックボックス)
チェックボックスラジオボタンは、ユーザが切り替え得るon/offスイッチである。当該コントロール要素がchecked属性が設定されると、スイッチが“on”になる。フォームが提出される際、“on”になっているチェックボックスコントロールのみが満足となる。

Forms in HTML documents (ja)


で、Struts の ActionForm を利用するときの解決方法としては:

これを回避するためにはFormのresetメソッドでCheckBoxの初期化処理を書いてやらないといけません。

CheckBoxイケてない。 - A Day In The Life


TECHSCORE に技術解説があった。

チェックボックスを使用する場合には上記のような不具合が生じるため、ActionFormにはプロパティを初期化するためのメソッド「reset」が用意されています。resetメソッドはHTTPリクエストからパラメータ値を読み取って設定する前に必ず呼ばれるものです。ActionFormで何らかの初期化をそのタイミングで行いたい場合には、resetメソッドをオーバーライドします。

2. ActionForm (5) | TECHSCORE(テックスコア)

捕鯨ー。

ページトップへ移動