将 JPA 实体表数据显示到 thymeleaf 视图

问题描述 投票:0回答:2

我有一个带有 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 的实体。

我只想显示书名而不是对象。我该怎么做?

java spring thymeleaf h2 spring-el
2个回答
4
投票

名称的 getter 必须命名为 getName() 才能被 ExpressionLanguage(SpEL = Spring Expresion Language) 找到。 setter 也应该是 setName。


0
投票

使用 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>
© www.soinside.com 2019 - 2024. All rights reserved.