th: поле предотвращает отображение входных данных на странице результатов .html - PullRequest
0 голосов
/ 10 ноября 2019

Я пытался отобразить ошибки проверки, используя этот подход , но он не работает. Вот моя форма регистрации пользователя:

<form action="#" th:action="@{/register}" th:object="${newUser}"  method="post">
  <input type="text" th:field="*{username}">
  <input type="password" th:field="*{password}">
  <input type="submit" value="Register">
</form>

Если я использую name = "username" и name = "password" вместо th: поле, то оно отлично связывает объект.

Вотмой контроллер:

    @PostMapping("/register")
public String handlePostRequest (@Valid @ModelAttribute("newUser") UserModel newUser, BindingResult bindingResult, Model model) {
    if(bindingResult.hasErrors()){
        System.out.println(bindingResult.getFieldErrorCount());
        for (FieldError err:bindingResult.getFieldErrors()){
            System.out.println(err.getDefaultMessage());
        }
    }else{
        newUser.setRoles("USER");
        userRepository.addUser(newUser);
        return "redirect/:login";
    }
    return "register";
}

Я обошел его, передав сообщение об ошибке в качестве атрибута модели вместо использования # fields.hasErrors

@Controller
 public class RegisterController {

    private IUserRepository userRepository;

    @Autowired
    public RegisterController(IUserRepository userRepository) {
        this.userRepository = userRepository;
    }

    @GetMapping({"/register"})
    public String handleGetRequest (Model model) {
        model.addAttribute("errorHappened",false);
        return "register";
    }

    @PostMapping("/register")
    public String handlePostRequest (@Valid @ModelAttribute("newUser") UserModel newUser, BindingResult bindingResult, Model model) {
        if(bindingResult.hasErrors()){
            model.addAttribute("errorHappened",true);
            model.addAttribute("errorMsg", bindingResult.getFieldError().getDefaultMessage());
        }else{
            model.addAttribute("errorHappened",false);
            newUser.setRoles("USER");
            if(userRepository.addUser(newUser))
                return "redirect:/login";
            else{
                model.addAttribute("errorHappened",true);
                String usernameTaken = "Username is already taken";
                model.addAttribute("errorMsg", usernameTaken);
                return "register";
            }
        }
        return "register";
    }

}

, а затем я отображаю ошибку, как это

<span class="alert alert-danger" role="alert" th:if="${errorHappened}" th:text="${errorMsg}" style="font-weight: bold"></span>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...