我在注册表单中收到用户字段错误
I'm getting error for user field in registration form
java.lang.IllegalStateException: Neither BindingResult nor plain
target object for bean name 'user' available as request attribute at
org.springframework.web.servlet.support.BindStatus.(BindStatus.java:153)
~[spring-webmvc-5.3.13.jar:5.3.13] at
org.springframework.web.servlet.support.RequestContext.getBindStatus(RequestContext.java:903)
~[spring-webmvc-5.3.13.jar:5.3.13] at
org.thymeleaf.spring5.context.webmvc.SpringWebMvcThymeleafRequestContext.getBindStatus(SpringWebMvcThymeleafRequestContext.java:227)
~[thymeleaf-spring5-3.0.12.RELEASE.jar:3.0.12.RELEASE]
HTML
<form action="#" th:action="@{/process_register}" th:object="${user}" method="post">
<h4 class="mb-4 pb-3">Sign Up</h4>
<div class="form-group">Username
<input type="text" th:field="*{username}" class="form-style">
</div>
<div class="form-group mt-2">Password
<input type="password" th:field="*{password}" class="form-style">
</div>
...</form>
控制器:
@GetMapping("/register")
public String showRegistrationForm(Model model) {
model.addAttribute("user", new User());
return "signup_form";
}
@PostMapping("/process_register")
public String processRegister(Model theModel, User user) {
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String encodedPassword = passwordEncoder.encode(user.getPassword());
user.setPassword(encodedPassword);
userService.save(user);
return "Wellcome";
}
很可能是您忘记了将 user
对象添加到控制器方法中的模型,从而使您进入了此表单页面。为确保这种情况不会发生最好的方法是将模型归因方法添加到始终处理此问题的控制器:
@ModelAttribute("user")
public User user() {
return new User();
}
另外请确保用户 class 有 getters、setters 并且没有定义 arg 构造函数——这对 Thymeleaf
很重要
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'user' available as request attribute at org.springframework.web.servlet.support.BindStatus.(BindStatus.java:153) ~[spring-webmvc-5.3.13.jar:5.3.13] at org.springframework.web.servlet.support.RequestContext.getBindStatus(RequestContext.java:903) ~[spring-webmvc-5.3.13.jar:5.3.13] at org.thymeleaf.spring5.context.webmvc.SpringWebMvcThymeleafRequestContext.getBindStatus(SpringWebMvcThymeleafRequestContext.java:227) ~[thymeleaf-spring5-3.0.12.RELEASE.jar:3.0.12.RELEASE]
HTML
<form action="#" th:action="@{/process_register}" th:object="${user}" method="post">
<h4 class="mb-4 pb-3">Sign Up</h4>
<div class="form-group">Username
<input type="text" th:field="*{username}" class="form-style">
</div>
<div class="form-group mt-2">Password
<input type="password" th:field="*{password}" class="form-style">
</div>
...</form>
控制器:
@GetMapping("/register")
public String showRegistrationForm(Model model) {
model.addAttribute("user", new User());
return "signup_form";
}
@PostMapping("/process_register")
public String processRegister(Model theModel, User user) {
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String encodedPassword = passwordEncoder.encode(user.getPassword());
user.setPassword(encodedPassword);
userService.save(user);
return "Wellcome";
}
很可能是您忘记了将 user
对象添加到控制器方法中的模型,从而使您进入了此表单页面。为确保这种情况不会发生最好的方法是将模型归因方法添加到始终处理此问题的控制器:
@ModelAttribute("user")
public User user() {
return new User();
}
另外请确保用户 class 有 getters、setters 并且没有定义 arg 构造函数——这对 Thymeleaf
很重要