Thymeleaf + Spring:Bean 名称“用户”的 BindingResult 和普通目标对象都不能用作请求属性
Posted
技术标签:
【中文标题】Thymeleaf + Spring:Bean 名称“用户”的 BindingResult 和普通目标对象都不能用作请求属性【英文标题】:Thymeleaf + Spring: Neither BindingResult nor plain target object for bean name 'User' available as request attribute 【发布时间】:2020-01-20 20:06:57 【问题描述】:当我想访问 myweb/register.html 时出现该错误 有人可以给我建议我做错了什么? 在 register.html 我已经突出显示 $User、*firstName、*lastName、*email 和 *password
Servlet.service() 用于 servlet [dispatcherServlet] 在上下文中的路径 [] 抛出异常 [请求处理失败;嵌套异常是 org.thymeleaf.exceptions.TemplateInputException:发生错误 在模板解析期间(模板:“类路径资源 [templates/register.html]")] 有根本原因
java.lang.IllegalStateException: 既不是 BindingResult 也不是普通的 bean 名称“用户”的目标对象可用作请求属性
控制器:
@RequestMapping(value = "/register" , method = RequestMethod.GET)
public ModelAndView register()
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("register"); // resources/templates/register.html
return modelAndView;
注册.html:
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
<title>Registration Form</title>
<!-- link rel="stylesheet" type="text/css" th:href="@/css/registration.css" /-->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body style="background-color: #ededed;">
<div style="background-color: #337ab7; height: 50px;"></div>
<div class="container-fluid" style="margin-top: 30px;">
<div class="row col-lg-4 col-lg-offset-4" style="margin-top: 40px; background-color: #fff; padding: 20px; border: solid 1px #ddd;">
<form autocomplete="off" action="#" th:action="@/register" th:object="$User" method="POST" class="form-signin" role="form">
<h3 class="form-signin-heading">Registration Form</h3>
<div class="form-group">
<div class="">
<input type="text" th:field="*firstName" placeholder="Name" class="form-control" />
</div>
</div>
<div class="form-group">
<div class="">
<input type="text" th:field="*lastName" placeholder="Last Name" class="form-control" />
</div>
</div>
<div class="form-group">
<div class="">
<input type="text" th:field="*email" placeholder="Email" class="form-control" />
</div>
</div>
<div class="form-group">
<div class="">
<input type="password" th:field="*password" placeholder="Password" class="form-control" />
</div>
</div>
<div class="form-group">
<div class="">
<button type="submit" class="btn btn-primary btn-block">Register User</button>
</div>
</div>
<span th:utext="$successMessage"></span>
</form>
</div>
</div>
</body>
</html>
用户.java:
package roster.schedule.user;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import roster.schedule.role.Role;
import javax.persistence.*;
import java.util.Set;
@Entity
@Table(name = "auth_user")
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
public class User
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "auth_user_id")
private int id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "email")
private String email;
@Column(name = "password")
private String password;
@Column(name = "technical")
private byte technical;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "auth_user_role", joinColumns = @JoinColumn(name = "auth_user_id"), inverseJoinColumns = @JoinColumn(name = "auth_role_id"))
private Set<Role> roles;
【问题讨论】:
您展示了一个控制器。您不会在其中的任何位置设置名为User
的模型值。
【参考方案1】:
您必须将空的用户对象添加到模型中。
尝试以下操作:
@RequestMapping(value = "/register" , method = RequestMethod.GET)
public ModelAndView register()
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("User", new User());
modelAndView.setViewName("register"); // resources/templates/register.html
return modelAndView;
【讨论】:
非常感谢!而已!我忘记了(不知道,我需要那个:D)关于这条线modelAndView.addObject("User", new User());
以上是关于Thymeleaf + Spring:Bean 名称“用户”的 BindingResult 和普通目标对象都不能用作请求属性的主要内容,如果未能解决你的问题,请参考以下文章
Spring-Thymeleaf 如何使用 EL 调用来自 Bean 的操作方法
Thymeleaf 内联 javascript spring bean 使用文本模板模式检查 null
Thymeleaf + Spring:Bean 名称“用户”的 BindingResult 和普通目标对象都不能用作请求属性
如何在 thymeleaf 中访问 Spring session bean 范围
Spring Boot / Thymeleaf / Hibernate:带有 Java 注解的 Sessionfactory Bean