JavaJSF和Hibernate在从数据库中查找特定记录并显示所有数据方面存在问题
我已经编写了一些代码,可以使用JSF、Hibernate和MySQL在数据库中执行CRUD函数。唯一的问题是,当我实现find
和getAllRecords
时,应用程序无法工作。我的一些代码如下:
图书管理员。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";
}
}
图书经理。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;
}
}
查找。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>
获取所有书籍。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: The class 'java.lang.String' does not have the property 'book_isbn'.
findBook的错误是
javax.el.PropertyNotWritableException: Illegal Syntax for Set Operation
# 1 楼答案
您正在
getAllBook()
中返回一个String
,因此应该返回ArrayList<Book>
(getAllBook()
类的BookController.java
)对于find页面,同样的,在
BookController.java
中,你的方法不应该返回String
,你必须返回一个Book对象:将
update
属性添加到comandButton