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

时间:2017-01-16 08:11:38

标签: html spring-mvc checkbox

我对新的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我找到了this so post,其中说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。提前致谢。

3 个答案:

答案 0 :(得分:2)

我在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;

}

在这里,您可以看到我只是在提交之前分配该复选框的已检查属性的值。这将是真是假。

答案 1 :(得分:0)

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

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

这就是为什么你总是在后面的代码中得到“真实”的原因。

答案 2 :(得分:0)

这有点像黑客攻击,但如果您在发布表单之前将输入标记的类型从“复选框”更改为“文本”,则无论是选中还是取消选中,您都会收到该值。

如果你使用jQuery:

$("input:checkbox").each(function(){this.type='text'})