我对新的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
。提前致谢。
答案 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'})