JSF и Hibernate Проблема при поиске определенной записи из базы данных и отображении всех данных

Я написал несколько кодов, которые могут выполнять функции CRUD в базе данных, используя JSF, Hibernate и MySQL. Единственная проблема происходит, когда я реализую find а также getAllRecords, приложение не работает. Некоторые мои коды приведены ниже:

Класс BookController.java

public class BookController {
private int isbn;
private String title;

public int getIsbn() {
    return isbn;
}
public void setIsbn(int isbn) {
    this.isbn = isbn;
}
public String getTitle() {
    return title;
}
public void setTitle(String title) {
    this.title = title;
}

public String findBook() throws Exception{
    BookManager bm = new BookManager();
    bm.findBook(isbn);

    return "find";
}

public String getAllBook() throws Exception{
    BookManager bm = new BookManager();
    bm.getAllBooks();

    return "all";
}
}

Класс BookManager.java

public class BookManager {

private SessionFactory sessionFactory;

public BookManager() throws Exception{

    //A sessionFactory is set up once for an application

    sessionFactory = new Configuration()
            .configure().buildSessionFactory(); // configures settings from hibernate.cfg.xml

}


public int addBook(int isbn, String title){
    Session session = sessionFactory.openSession();
    Transaction tx = session.beginTransaction();
    Book b = new Book();
    b.setIsbn(isbn);
    b.setTitle(title);
    int BookID = (Integer)session.save(b);
    tx.commit();
session.close();
return BookID;
}


public void updateBook(int isbn, String title){
    Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();
            Book b = new Book();
                b.setIsbn(isbn);
                b.setTitle(title);
            session.update(b);
        tx.commit();
    session.close();    
}

public Book findBook(int isbn){
    Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();
            Book b = (Book)session.get(Book.class, isbn);
        tx.commit();
    session.close();
    return b;
}

public void deleteBook(int isbn){
    Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();
            Book b = (Book)session.get(Book.class, isbn);
            session.delete(b);
        tx.commit();
    session.close();    
}

@SuppressWarnings("unchecked")
public ArrayList<Book> getAllBooks(){
    Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();
            ArrayList<Book> allBooks = (ArrayList<Book>)session.createQuery("from Book").list();
        tx.commit();
    session.close();
return allBooks;    
}
 }

Find.jsp

<h:form>

    ISBN: <h:inputText value = "#{bookController.isbn} "/> <br>

    <h:commandButton action="#{bookController.findBook}" value="find" /> <br>

    Book Found is <h:outputLabel value="#{bookController.title }" />

</h:form>

getAllBooks.jsp

  <h:form>
    <h:dataTable value = "#{bookController.allBook }" var = "all1">
    <f:facet name = "header">
    <h:outputText value="Existing Books" />
    </f:facet>

    <h:column>
        <f:facet name = "header">
            <f:verbatim>ISBN </f:verbatim>
        </f:facet>
        <h:outputText value="#{all1.book_isbn }" /> <!--  book_isbn column in table db -->
    </h:column>

        <h:column>
        <f:facet name = "header">
            <f:verbatim>Title</f:verbatim>
        </f:facet>
        <h:outputText value="#{all1.book_title }" />  <!--  book_title column in table db -->
    </h:column> 
    </h:dataTable>  
  </h:form>

Я получаю ошибку для getAllBooks:

javax.el.PropertyNotFoundException: класс 'java.lang.String' не имеет свойства 'book_isbn'.

Ошибка для findBook, которую я получаю,

javax.el.PropertyNotWritableException: недопустимый синтаксис для операции набора

1 ответ

Решение

Вы возвращаете String в getAllBook(), так что вы должны вернуть ArrayList<Book> (getAllBook() из BookController.java учебный класс)

public ArrayList<Book> getAllBook() throws Exception{
    BookManager bm = new BookManager();
    return bm.getAllBooks();
}

и для страницы поиска, то же самое, в BookController.java ваш метод не должен возвращать String, вы должны вернуть объект Book:

public void findBook() throws Exception{
    BookManager bm = new BookManager();
    Book book = bm.findBook(isbn);
    this.title = book.getTitle();
}

,

добавить update Атрибут вашего comandButton .

<h:form>

    ISBN: <h:inputText value = "#{bookController.isbn} "/> <br>

    <h:commandButton action="#{bookController.findBook}" value="find" update="@form" /> <br>

    Book Found is <h:outputLabel value="#{bookController.title }" />

</h:form>
Другие вопросы по тегам