Исключение при оценке выражения SpringEL, курс Spring Guru - PullRequest
0 голосов
/ 22 сентября 2018

Book.java

package pl.spring.guru.spring5webapp.model;

import javax.persistence.*;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;

@Entity
public class Book {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    private String title;
    private String isbn;
    @OneToOne
    private Publisher publisher;

   @ManyToMany
   @JoinTable(name = "author_book", joinColumns = @JoinColumn(name = 
   "book_id"), inverseJoinColumns = @JoinColumn(name = "author_id"))

   private Set<Author> authors = new HashSet<>();

   public Book() {
   }

   public Book(String title, String isbn, Publisher publisher){
       this.title=title;
       this.isbn=isbn;
       this.publisher=publisher;
   }

   public String getTitle() {
       return title;
   }

   public void setTitle(String title) {
       this.title = title;
   }

   public String getIsbn() {
      return isbn;
  }

   public void setIsbn(String isbn) {
      this.isbn = isbn;
  }

  public Publisher getPublisher() {
      return publisher;
  }

  public void setPublisher(Publisher publisher) {
     this.publisher = publisher;
  }

  public Set<Author> getAuthors() {
     return authors;
  }

  public void setAuthors(Set<Author> authors) {
     this.authors = authors;
  }
}

BookController.java

package pl.spring.guru.spring5webapp.controllers;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import pl.spring.guru.spring5webapp.repositories.BookRepository;

@Controller
public class BookController {

    private BookRepository bookRepository;

    public BookController(BookRepository bookRepository) {
        this.bookRepository = bookRepository;
    }

    @RequestMapping(value = "/books")
    public String getBooks(Model model){
        model.addAttribute("books",bookRepository.findAll());

    return "books";
  }
}

books.html - шаблон thymeleaf

<!DOCTYPE html>
<html lang="en" xmlns:th=”http://www.thymeleaf.org”>
<head>
    <meta charset="UTF-8">
    <title>Spring Framework Guru</title>
</head>
<body>
<h1>Books list</h1>
<table>
   <tr>
       <th>ID</th>
       <th>Title</th>
       <th>Author</th>
   </tr>
   <tr th:each="book : ${books}">
        <td th:text="${book.id}">123</td>
       <td th:text="${book.title}">Spring in Action</td>
       <td th:text="${book.publisher.name}">Wrox</td>
   </tr>
</table>

</body>
</html>

, когда я пытаюсь перейти на localhost/ books я получаю

Исключение при оценке выражения SpringEL: "book.id" (шаблон: "books" - строка 16, столбец 13)

Я простоизучая весну, и я начинаю использовать учебное пособие для гуру рамок весны.Я тоже не понимаю, зачем добавлять пустой конструктор в book.java.Без этого у меня есть следующая проблема:

Нет конструктора по умолчанию для объекта:: pl.spring.guru.spring5webapp.model.Book;вложенным исключением является org.hibernate.InstantiationException: нет конструктора по умолчанию для сущности:: pl.spring.guru.spring5webapp.model.Book

1 Ответ

0 голосов
/ 22 сентября 2018

Вам не хватает геттера для идентификатора.Без этого механизм шаблонов не сможет получить к нему доступ.

Что касается конструктора по умолчанию - Spring требует создания экземпляра сущности.Как Spring должен знать, какие параметры использовать, если конструктор по умолчанию недоступен.

Помимо учебного пособия, вы должны взглянуть на справочные документы Spring Framework.Это много читается, но особенно хорошо знакомы с основами DI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...