我有一个带有 id 和 name 列的 JPA 实体表。我想将名称值显示到 thymeleaf 视图。现在我可以在视图中看到实体对象,但看不到名称的列值。以下是我创建表并定义 getter 和 setter 的方法:
@Entity
@Table(name = "Book")
public class Book extends AbstractPersistable<Long> {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@Column(name = "name")
private String name;
public Long getID() {
return this.id;
}
public String getContent() {
return this.name;
}
public void setID (Long id) {
this.id = id;
}
public void setContent (String name) {
this.name = name;
}
}
这就是我尝试从控制器设置内容的方式:
@Controller
@RequestMapping("/")
public class BookController {
@Autowired
private BookRepository bookRepository;
@RequestMapping("/addBook")
@ResponseBody
public String addBook(@RequestParam("name") String name) {
Book book = new Book();
book.setContent(name);
bookRepository.save(book);
return name;
}
@RequestMapping(value = "book", method = RequestMethod.GET)
public String books(Model model) {
model.addAttribute("books", bookRepository.findAll());
return "book";
}
}
百里香叶视图模板:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
<head lang="en">
<meta charset="UTF-8" />
<title>Books</title>
</head>
<body>
<h1>Books Database</h1>
<ul th:each="book : ${books}">
<li th:text="${book.name}"></li>
</ul>
</body>
</html>
当我从
addBook
页面添加新书籍并访问书籍页面以查看书籍名称时,我收到此错误:
计算 SpringEL 表达式时出现异常:“book.name”。在IDE中 控制台发现错误为: org.springframework.expression.spel.SpelEvaluationException:EL1008E: 在该类型的对象上找不到属性或字段“名称” 'sec.book.BookNames.
可能出了什么问题?
在视图中,如果我使用
th:text="${book}
,那么表中的每一行都会出现一个实体对象列表,如下所示。这是显示的内容:
类型为 sec.helloworld.Book 且 id 为 null 的实体。
我只想显示书名而不是对象。我该怎么做?
名称的 getter 必须命名为 getName() 才能被 ExpressionLanguage(SpEL = Spring Expresion Language) 找到。 setter 也应该是 setName。
使用 Lombok 自动生成 getter/setter...
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@Entity
@Entity
@Table(name = "Book")
public class Book extends AbstractPersistable<Long> {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@Column(name = "name")
private String name;
...
// Remove your hand-coded getters/setters
}
Maven POM.XML
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>