2012年07月14日

Struts1のhtml:checkboxではまりました。。。

久しぶりにStruts1を見ました。。。理由はまぁ色々とありまして。。。

元々StrutsでCheckboxをどういうふうに処理すべきかなんていうのは覚えておりません。
ただ、ブラウザはWebサーバーにチェックされていないCheckboxについては値を送信しないことは知っていましたが、実際jcwebを使うとJavaの中から直接Checkboxの状態を取得できてしまいますし、仕事ではCheckboxはあまりつかわないようにしていたので考えたことがありませんでした。(これはダメですね。。。しかもJSFの他のOSSライブラリを使っていたり)。

で、聞いた話によると、どうもうまくStruts1でCheckboxは未だ難しいようです。
具体的には以下の場合です。
・2画面の画面遷移であり、共に同じActionFormを使う
・1画面目でとある条件(DB検索した結果を入れるだけですが)を満たすと、チェックを画面につけた状態にする
・そうでなければチェックしていない状態にする
・チェックがついている状態で表示された場合、チェックを外してサブミットしても、チェック状態と同じ状態でブラウザから値が送信されてくる

環境としては以下です。
・Windows 7 (無関係でしょうが)
・IE9
・JDK6 (無関係でしょうが)
・Tomcat 7.0.29 (無関係でしょうが)
・Struts 1.3.10
・画面はJSP (無関係でしょうが)


実際に私もデバッグしてみると、valueの値が送られるとかそういう感じでもなく、checkedの属性があればon、なければoffが送られるような感じの挙動でした(忙しかったのでcheckedの値とvalueの値がどうこうまでの検証まではしていません。ごめんなさい。)。
なので、特効薬としてこんな感じにしました。

・struts-config.xml







・ActionForm

package com.sample;

public class Form extends ActionForm {

/** チェックボックス */ // ここはhtml:checkboxのproperty属性名と一致
private boolean check1 = false;

// setter/getterは省略
}

ポイントとしては、型は必ずbooleanを使うところです。

・JSPの中身(抜粋)


チェック
送信



JSPについては、実は以下の実装の方がいいのかもしれません。ifで書いてますが、論理否定に変えた方が美しいでしょう。

・JSPの中身(抜粋)


チェック
送信


あとは、onclickの箇所を別functionにするとか、どのブラウザでも確実に動作するためにjQuery化するとか、色々と工夫の仕方はあるでしょう。

ちなみにですが、SyntaxHighlighterを使っておりますが、勝手にタグ部分が大文字になっております。ソース上は全部小文字で記述しておりますのでご注意ください。


なんとなくやってみて、なんとなく動作したものなので、もっといいやり方があればご教授ください。
posted by Kiruahさん at 19:23| Comment(0) | TrackBack(0) | ノウハウ
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス: [必須入力]

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/57047782
※ブログオーナーが承認したトラックバックのみ表示されます。
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック