Как проверить, установлен ли флажок при отправке формы при загрузке Thymeleaf и Spring? - PullRequest
0 голосов
/ 10 мая 2018

Я хочу проверить, установлен ли флажок при отправке формы.

Мне нужно проверить ввод пользователя на стороне сервера, поэтому я использую валидатор Spring MVC Form.

Я проверяю форму с помощью класса UserFormValidator, но не могу найти, как проверить поле флажок.

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>

Вот что я сделал в классе Controller:

@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;
}

Кажется, мой код работает правильно, и я не знаю, правильно ли это.

1 Ответ

0 голосов
/ 19 мая 2018

Я только удалил th: field = * {флажок}, и все работает правильно, и вот что я сделал:

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

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");
        }
    }
}
...