Thymeleaf页面模型字段错误不显示及BindingResult异常求助
Thymeleaf
#fields.errors() 无法显示校验信息并抛出异常 在使用Thymeleaf的#fields.errors()方法收集所有校验信息时,发现该方法无法在HTML页面显示错误信息,还会抛出异常。已尝试多种错误捕获方法,问题仍未解决。
核心错误提示
Neither BindingResult nor plain target object for bean name 'user' available as request attribute
错误堆栈详情
Caused by: java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'user' available as request attribute at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:153) at org.springframework.web.servlet.support.RequestContext.getBindStatus(RequestContext.java:903) at org.thymeleaf.spring5.context.webmvc.SpringWebMvcThymeleafRequestContext.getBindStatus(SpringWebMvcThymeleafRequestContext.java:227) at org.thymeleaf.spring5.util.FieldUtils.getBindStatusFromParsedExpression(FieldUtils.java:306) at org.thymeleaf.spring5.util.FieldUtils.getBindStatus(FieldUtils.java:253) at org.thymeleaf.spring5.util.FieldUtils.getBindStatus(FieldUtils.java:227) at org.thymeleaf.spring5.processor.AbstractSpringFieldTagProcessor.doProcess(AbstractSpringFieldTagProcessor.java:174) at org.thymeleaf.processor.element.AbstractAttributeTagProcessor.doProcess(AbstractAttributeTagProcessor.java:74) ... 69 more Caused by: org.attoparser.ParseException: Error during execution of processor 'org.thymeleaf.spring5.processor.SpringInputGeneralFieldTagProcessor' (template: "user_login" - line 28, col 21) at org.attoparser.MarkupParser.parseDocument(MarkupParser.java:393) at org.attoparser.MarkupParser.parse(MarkupParser.java:257) at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:230) ... 48 more Caused by: org.thymeleaf.exceptions.TemplateProcessingException: Error during execution of processor 'org.thymeleaf.spring5.processor.SpringInputGeneralFieldTagProcessor' (template: "user_login" - line 28, col 21)
控制器代码
@GetMapping("/user_login") public String getUserLoginPage(Model model){ LoginModel user_model = new LoginModel(); model.addAttribute("title", "User Login Page"); model.addAttribute("user", user_model); return "user_login"; } // 用户登录处理器 @PostMapping("/process_user_login") public String processUserLogin( @Valid @ModelAttribute LoginModel user, BindingResult bindingResult,Model model){ if(bindingResult.hasErrors()){ logger.info("用户登录表单存在错误"); return "user_login"; } model.addAttribute("user", user); return "user_login"; }
模型类代码
package com.attendance.model; import javax.validation.constraints.NotBlank; import javax.validation.constraints.Size; public class LoginModel { @NotBlank(message = "邮箱不能为空") @Size(min = 3, max = 20, message = "长度需在3-20字符之间" ) private String userEmail; @NotBlank(message = "密码不能为空") private String password; public LoginModel() { super(); } public LoginModel(String userEmail, String password) { super(); this.userEmail = userEmail; this.password = password; } public String getUserEmail() { return userEmail; } public void setUserEmail(String userEmail) { this.userEmail = userEmail; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "LoginModel [userEmail=" + userEmail + ", password=" + password + "]"; } }
HTML视图代码
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org" th:replace="base::layout(~{::section})"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <style rel="stylesheet" th:href="@{/css/userlogin.css}" ></style> <title>首页 </title> </head> <body> <section> <div class="card card-container mb-4 pb-5"> <!-- <img class="profile-img-card" src="//lh3.googleusercontent.com/-6V8xOA6M7BA/AAAAAAAAAAI/AAAAAAAAAAA/rzlHcD0KYwo/photo.jpg?sz=120" alt="" /> --> <img id="profile-img" class="profile-img-card" src="//ssl.gstatic.com/accounts/ui/avatar_2x.png" /> <p id="profile-name" class="profile-name-card"></p> <form th:object="${user}" th:action="@{/process_user_login}" method="post" class="form-signin"> <span id="reauth-email" class="reauth-email"></span> <input type="email" name="userEmail" th:field="*{userEmail}" id="inputEmail" class="form-control" placeholder="邮箱地址" autofocus /> <p th:if="${#fields.hasErrors('userEmail')}" >输入格式错误</p> <!-- <p th:each="e : ${#fields.errors('userEmail')}" th:text="${e}" ></p> --> <input type="password" name="password" th:field="*{password}" id="inputPassword" class="form-control" placeholder="密码" /> <div id="remember" class="checkbox"> <label> <input type="checkbox" value="remember-me"> 记住我 </label> </div> <button class="btn btn-lg btn-primary btn-block btn-signin" type="submit">登录</button> </form> <!-- /form --> <a href="#" class="forgot-password"> 忘记密码? </a> </div> <!-- /card-container --> </section> </body> </html>
内容的提问来源于stack exchange,提问作者Jitendra
相关产品推荐
相关产品推荐

