2012年07月17日

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

ちなみにですが、Struts1のActionFormにはresetメソッドをオーバーライドすることで、一応はチェックボックスを一度初期化することができます。

よって、ブラウザからリクエストを受けたタイミングで一度チェックボックスの変数のみfalseにし、もしブラウザから値が送信されていればtrueに変更することで、チェックボックスの状態を扱うことはできます。
実装するとすると以下のようになろうかと思います。

・ActionForm

package com.sample;

public class Form extends ActionForm {

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

// setter/getterは省略

public void reset(ActionMapping mapping, HttpServletRequest request) {

check1 = false;
}
}


ですが、画面の仕様やフォームの仕様というものは変更されることがあります。
ActionFormは普通には画面の入出力情報を保持している入れ物と考えておくほうが非常に分かりやすく、その中に例外的にresetメソッドが実装されている状態ですと、仕様変更時にresetメソッドの実装修正が発生してしまい、バグに繋がる恐れがあります。

一応、もし実装と設計とそれぞれの相関を完全にデータとして保持し、影響調査により修正すべき箇所を洗い出すことができるならば、resetメソッドは有効に働くでしょう。

ですが、私の個人的な意見としてはresetメソッドやActionFormにはvalidateメソッドを実装できますが、それらはActionFormでオーバーライドしないほうが良いのではないかと考えています。
できる限りそうでない方法を検討し、各クラスや成果物の責務を明確かつシンプルにしておくことを心がけるべきだと考えています。

ちなみにですが、StrutsのJavadocでも理由はいくつかあげられていますが(チェックボックスを初期化するのが必要なら仕方なしとして)、オーバーライドしないことを推奨しています。特にセッションスコープに格納しつつ、複数画面で使いまわす場合には要注意です。

一応、忘れていないですよっていう意味も込めての補足で記載しました。
posted by Kiruahさん at 22:41| Comment(0) | TrackBack(0) | ノウハウ
この記事へのコメント
コメントを書く
お名前: [必須入力]

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

ホームページアドレス:

コメント: [必須入力]

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


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

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