Spring MVC – 如何绑定布尔变量中的HTML复选框值

我对春天的mvc世界很陌生。 我试图从HTML表单复选框发送布尔值。 当用户选中复选框时,它将发送true,否则返回false。

<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> 

一些googilng 后 ,我发现这个帖子 ,它说, standard behaviour is the value is only sent if the checkbox is checked. 所以我知道,如果选中复选框,表单将提交复选框的值,否则不会提交。 当未选中复选框时,数据类中的初始化值将生效。

但在我的情况下,每次我提交表单提交true

这里是我的rest控制器的绑定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 。 提前致谢。

我在Struts工作,对Spring不太了解。 但是我面临着类似的情况。

我所做的是绑定了我的From类中的布尔属性复选框。 所以对于每个复选框,一个布尔变量。 而在前端提交时,我会调用一个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; } 

在这里你可以看到我只是在提交前分配Checkbox的checked属性的值。 这将是真或假。

您应该从输入中删除“值”属性。 如果您希望在加载页面时选中复选框,请添加“checked”属性而不是“value”。 用这个替换输入行:

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

这就是为什么你总是在代码背后“真”的原因。