在 Thymeleaf 和 Spring 引导中提交表单时如何检查复选框是否被选中?
How to check if checkbox is checked when submiting a form in Thymeleaf and Spring boot?
我想检查提交表单时复选框是否被选中。
我需要在服务器端验证用户输入,所以我使用 Spring MVC 表单验证器。
我正在使用 UserFormValidator 检查表单 class 但我找不到如何验证字段复选框。
html代码:
<form method="post" th:action="@{/addUser}" th:object="${userForm}">
<!-- other fields ... -->
<input type="checkbox" name="isTermsChecked" value="" th:checked="${isChecked}">
<span class="text-danger" th:text="${errorTermsChecked}"></span>
<button type="submit">Get Started</button>
</form>
这就是我在控制器中所做的 class:
@PostMapping(value = "/addUser")
public ModelAndView addUser(@Valid @ModelAttribute("userForm") UserForm userForm, BindingResult bindingResult, String isTermsChecked) {
ModelAndView modelAndView = new ModelAndView();
boolean isChecked = false;
System.out.println("isTermsChecked: "+isTermsChecked);
//check is checkbox checked
if (isTermsChecked == null) {
modelAndView.addObject("isChecked", isChecked);
modelAndView.addObject("errorTermsChecked", "Please accept the Terms of Use.");
}else{
isChecked = true;
modelAndView.addObject("isChecked", isChecked);
modelAndView.addObject("errorTermsChecked", "");
}
if (bindingResult.hasErrors() || isTermsChecked == null) {
modelAndView.setViewName("view_addUser");
} else {
//add user ...
modelAndView.setViewName("view_addUser");
}
return modelAndView;
}
我的代码似乎可以正常工作,但我不知道它是否正确。
我只删除了 th:field=*{checked} 并且一切正常,这就是我所做的:
<input name="checked" class="form-check-input" type="checkbox" th:checked="*{checked}" />
在控制器中:
@PostMapping(value = "/contact")
public String contactUsHome(@Valid @ModelAttribute("mailForm") final MailForm mailForm, BindingResult bindingResult)
throws MessagingException {
if (bindingResult.hasErrors()) {
return HOME_VIEW;
} else {
emailService.sendSimpleMail(mailForm);
return REDIRECT_HOME_VIEW;
}
}
为了验证,我使用了 Spring 验证:
public class MailValidator implements Validator {
//...
@Override
public void validate(Object obj, Errors errors) {
//...
MailForm mailForm = (MailForm) obj;
validateChecked(errors, mailForm);
//...
}
private void validateChecked(Errors errors, MailForm mailForm) {
if (mailForm.isChecked() == false) {
errors.rejectValue("checked", "mailForm.checked");
}
}
}
我想检查提交表单时复选框是否被选中。
我需要在服务器端验证用户输入,所以我使用 Spring MVC 表单验证器。
我正在使用 UserFormValidator 检查表单 class 但我找不到如何验证字段复选框。
html代码:
<form method="post" th:action="@{/addUser}" th:object="${userForm}">
<!-- other fields ... -->
<input type="checkbox" name="isTermsChecked" value="" th:checked="${isChecked}">
<span class="text-danger" th:text="${errorTermsChecked}"></span>
<button type="submit">Get Started</button>
</form>
这就是我在控制器中所做的 class:
@PostMapping(value = "/addUser")
public ModelAndView addUser(@Valid @ModelAttribute("userForm") UserForm userForm, BindingResult bindingResult, String isTermsChecked) {
ModelAndView modelAndView = new ModelAndView();
boolean isChecked = false;
System.out.println("isTermsChecked: "+isTermsChecked);
//check is checkbox checked
if (isTermsChecked == null) {
modelAndView.addObject("isChecked", isChecked);
modelAndView.addObject("errorTermsChecked", "Please accept the Terms of Use.");
}else{
isChecked = true;
modelAndView.addObject("isChecked", isChecked);
modelAndView.addObject("errorTermsChecked", "");
}
if (bindingResult.hasErrors() || isTermsChecked == null) {
modelAndView.setViewName("view_addUser");
} else {
//add user ...
modelAndView.setViewName("view_addUser");
}
return modelAndView;
}
我的代码似乎可以正常工作,但我不知道它是否正确。
我只删除了 th:field=*{checked} 并且一切正常,这就是我所做的:
<input name="checked" class="form-check-input" type="checkbox" th:checked="*{checked}" />
在控制器中:
@PostMapping(value = "/contact")
public String contactUsHome(@Valid @ModelAttribute("mailForm") final MailForm mailForm, BindingResult bindingResult)
throws MessagingException {
if (bindingResult.hasErrors()) {
return HOME_VIEW;
} else {
emailService.sendSimpleMail(mailForm);
return REDIRECT_HOME_VIEW;
}
}
为了验证,我使用了 Spring 验证:
public class MailValidator implements Validator {
//...
@Override
public void validate(Object obj, Errors errors) {
//...
MailForm mailForm = (MailForm) obj;
validateChecked(errors, mailForm);
//...
}
private void validateChecked(Errors errors, MailForm mailForm) {
if (mailForm.isChecked() == false) {
errors.rejectValue("checked", "mailForm.checked");
}
}
}