2017-01-16 23 views
1

私はspring mvc worldに非常に新しいです。私はブール値をHTMLフォームのチェックボックスから送信しようとしています。ユーザーがチェックボックスをオンにすると、trueを送信し、そうでない場合はfalseを送信します。私はそれがstandard behaviour is the value is only sent if the checkbox is checked.は、だから私はチェックボックスは、フォームが、それ以外の場合は提出しないであろう、チェックボックスの値を提出するチェックした場合にそれがあることを理解しているものを言っthis so postを、発見したいくつかのgoogilng後Spring MVC - ブール変数のHTMLチェックボックスの値をバインドする方法

<form class="attendanceBook" role="form" method="post" action="/attendances"> 
    <div class="row"> 
     <div class="form-group"> 
      <div class="col-xs-4"> 
       <label class="control-label">Check Here</label> 
      </div> 
      <div class="col-xs-4"> 
       <input type="checkbox" name="i" id="i" value="true" /> 
      </div> 
      <div class="col-xs-4"> 
       <input type="submit" value="Click"/> 
      </div> 
     </div> 
    </div> 
</form> 

。チェックされていないチェックボックスがあると、データクラスの初期値が有効になります。

しかし私の場合は、フォームを提出するたびにtrueを提出します。

ここにバインドhtmlフォームの送信用の私の残りのコントローラです。

@RestController 
@RequestMapping("attendances") 
class AttendanceRestController { 

val logger = getLogger(AttendanceRestController::class.java) 

@PostMapping 
fun patchAttendance(@RequestBody attendanceJson: AttendanceJson): ResponseEntity<*> { 
    logger.info("attendanceJson {}", attendanceJson) 

    return responseOK(attendanceJson) 
} 

} 

データクラス(私はkotlin使用しています)

data class AttendanceJson (
    var i: Boolean = false, 
    var t: String = "" 
) 

それでは、チェックボックスとフォームの送信からブールデータをバインドする方法となります。私もThymeleafを使用しています。前もって感謝します。

答えて

2

私はStrutsで働いていて、Springについてよく知らないです。しかし、私は同様の状況に直面した。

私が行ったことは、私のブール値のプロパティでチェックボックスをバインドしたことですからクラス。したがって、各チェックボックスに対して、1つのブール変数があります。そして、フロントエンドに提出する時に、私はJS機能コードを呼び出します。ここ

function verifyCheckboxes() { 

    document.getElementById("researchPaper").value = document.getElementById("researchPaper").checked; 

    document.getElementById("researchPaperSeminarProceed").value = document.getElementById("researchPaperSeminarProceed").checked; 

    document.getElementById("extraActivities").value = document.getElementById("extraActivities").checked; 

    document.getElementById("studentAchivements").value = document.getElementById("studentAchivements").checked; 

} 

下回っているあなたは、私はちょうど の値が直前というチェックボックスのプロパティを確認割り当てています見ることができます提出する。真か偽のどちらかになります。

+0

返信いただきありがとうございます。はい、私はJSでこれを行うことができます。しかし、「標準行動」はどうですか? – seal

+0

私はそれが問題になるとは思わない、このコードは私のために働いた。あなたの解決策は –

+0

+1です。それは素敵で清潔です。しかし、誰かが理由を答えることができ、生のHTMLだけでこれをどうやって行うことができるかを見てみましょう。 – seal

0

入力から 'value'属性を削除する必要があります。ページを読み込むときにチェックボックスをオンにしたい場合は、 '値'ではなく 'チェックされた'属性を追加します。これで入力行を置き換え :

<input type="checkbox" name="i" id="i" checked="checked"/> 

これはあなたが常に背後にあるコードに「真」を得る理由です。

+1

いいえ、これは理由ではありません。あなたのコードに従って、私はテストしました。それは 'on'を提出します。これはデータをバインドしないブール値バネではないため、変数の初期化値は残っています。変数を初期化しないと、例外がスローされます。オンまたはオフはバインドされず、trueまたはfalseが必要です。 – seal