ここで単純なものが欠けている可能性があると推測していますが、多くの検索を行ったが、答えが見つかりませんでした...
概要
JavaBeans をサポートする既製のライブラリを使用して、HTML フォームからチェックボックスを取得し、それを使用して JavaBean にブール値フィールドを入力し、データベース テーブルの更新に使用するにはどうすればよいですか? これがうまくいかない場合、どのようなアプローチが最適でしょうか? 最終的に、私はフィールド固有のコードを他のすべての点で一般的なコードで書くことを避けようとしています。
説明
フォームを表示する jsp ファイル (addScreen.jsp) があります。
フォームに入力されたデータを使用して、JavaBean (タイプ Screens) に入力したいと考えています。
次に、JavaBean を (Hibernate 経由で) 使用して、データベース テーブルのレコードを更新します。
データベース テーブル (Screens) には、ブール型の列 enabledFlag が含まれています。
これを html フォームで表現した方法は、チェックボックスです。
私のコントローラ コードでは、フォームを処理するときに、JavaBeans をサポートするために提供されているエレガントで汎用的な機能を使用したいと考えています。
だから私は BeanUtils.populate() メソッドを使用して HTML フォームからデータを取得し、それを使用して
screentype のフィールドに入力しようとしていますScreens。このアプローチは、ほとんどのフィールドで非常にうまく機能
screenし、フォームからのデータを適切な型に変換して、画面 JavaBean 内に格納します。しかし(ここに問題があります)チェックボックスを処理せず、真または偽の値を作成して
ScreensJavaBean 内のブール フィールドに入力します。実際、そのフィールドには常に が入力されたままになりfalseます。何もしないと思いますが、デフォルトは false です。これが私が行ったのとまったく同じように機能しない理由がわかると思います(ただし、お気軽に修正してください)。チェックボックスの状態が HttpServletRequest パラメータに記録される方法は、おそらく BeanUtils.populate() が期待するものを反映しないため、何も役に立ちません。しかし、それが何を期待しているのかわからないので、 populate() が正しい答えを与えるように入力を操作する方法がわかりません(それが非常に明確かどうかはわかりません)。
上記を踏まえて、私の質問は次のとおりです。
私がやろうとしていることに根本的に問題がありますか?つまり、BeanUtilsまたは他の汎用JavaBeanライブラリを使用して、チェックボックスを含むHTMLフォームからJavaBeanにデータを入力しますか? もしそうなら、私の目標を達成するためのより良い方法を教えてください。
私がやろうとしていることに根本的な問題がないと仮定すると、間違った方法またはアプローチを使用していますか、それとも populate() を呼び出す前に何らかの方法でデータを操作して、チェックボックスを正しく解釈する必要がありますか?
これについての他のヒントはありますか?
関係のない詳細で読者を圧倒することなく、以下に関連するコードをいくつか含めようとしましたが、それが役立つかどうかをもっと見るために気軽に尋ねてください. すべてのフィードバックを歓迎します。
コード スニペット
enabledFlag チェックボックスを含む addScreen.jsp からのフォーム
<form id="editScreen" method="post" action='Controller.do'>
<table>
<col class='label' />
<tr>
<td>
<label>Screen Name:</label>
</td>
<td>
<input type='text' name='name'>
</td>
</tr>
<tr>
<td>
<label>Enabled?:</label>
</td>
<td>
<input type="checkbox" name="enabledFlag" value="Enabled" checked>
</td>
</tr>
<tr><td>
<input type='submit' name='addButton' value='Add'>
</td></tr>
</table>
</form>
Screens JavaBean 内の有効フラグの宣言
private boolean enabledFlag;
@Column(name = "EnabledFlag", nullable = true, insertable = true, updatable = true, length = 0, precision = 0)
@Basic
public boolean isEnabledFlag() {
return enabledFlag;
}
public void setEnabledFlag(boolean enabledFlag) {
this.enabledFlag = enabledFlag;
}
BeanUtils.populate() の呼び出し
BeanUtils.populate(data, request.getParameterMap());
dataタイプScreensでありrequest、HttpServletRequestフォーム データを含む です。