2011-07-24 15 views
7

これは論理的な質問です。 Webページにチェックボックスがあり、ブールオブジェクト(Java)にサーブレットリクエストパラメータの値を格納します。ロジックは、チェックボックスのリクエストパラメータがnullでない場合はオブジェクトをtrueにし、それ以外の場合はnullにします。ページが再び呼び出されると、格納された値がtrueの場合、チェックボックスに「チェック済み」とマークされます。サーブレットからチェックボックスの値を動的に設定/取得する方法

this.checkbox = (servlet.getParameter("checkbox")!=null && servlet.getParameter("checkbox").contentEquals("on"))?true:null; 

問題は、そのチェックボックスオブジェクトを保持すると開始されます。まず、永続化されたデータをページに埋め込み、サーブレットの値を入力します。チェックボックスの値がデータベースにtrueとして保存されている場合、チェックボックスのサーブレットパラメータがnullになっているため、ユーザーがページのチェックを外してサブミットすると、チェックボックスをnullにできません。したがって、チェックボックスは常に上書きされるので永続化された値を表示します。だから、誰かが私はどのようにオブジェクトの値を塗りつぶしでいくつかの論理変更を提案することができます

+2

ブール変数は、真または偽でなければなりません。真または偽ではありません。 –

答えて

17

チェックボックスの唯一の有効なテストは、getParameter()nullを返すかどうかを確認することです。

戻り値がnullの場合、チェックされません。それ以外の場合はチェックされます。

最初のページのプレゼンテーションでチェックボックスをオンにしたい場合は、checkedという属性が存在する必要があります。チェックしない場合は、存在しないようにしてください。以下の例のように、パラメータ値は常にcheckedである必要があります。この例では

<label> 
    <input 
    type="checkbox" 
    id="cb_id" 
    name="cb_id" 
    value="cb_id_value" 
    checked="checked" 
    /> 
    My label 
</label> 

、あなたのサーブレットの処理コードにこのロジックを持っていることがあります。チェックボックスが上記の例では、ユーザによってチェックされている場合getParameter"cb_id_value"を返すこと

HTTPServetRequest request = ...; 

boolean cbState = request.getParameter("cb_id") != null; 

注意、しかし、通常は専用の名前を持つチェックボックスが1つしかないので、値を確認する必要はありません。

ご参考までに、servletgetParameterを使用しています。私はあなたのシステムでそれがHTTPServletRequestのモニカであることを願っています。

+0

パラメータを名前またはIDで取得しますか?また、なぜ '' request.getParameterValues(..) ''を使うことができないのですか? –

0

チェックボックスフィールドの変更された値を維持していないか、フィールドが常にチェックされて表示される原因となるnull値の処理に混乱が生じているようです。

データベースフィールドに、有効なブール値が常に含まれていることを確認してください。フィールドにはNULLを許可せず、適切なデフォルト値を設定してください。

フォームの提出時に、チェックボックスがオンの場合はtrue、それ以外の場合はfalseにデータベース値を更新する必要があります。

フォームを表示するときは、データベース値がtrueの場合にのみ、タグに「checked」属性を含める必要があります。

関連する問題