2016-01-23 5 views
0

J'ai écrit quelques codes qui peuvent exécuter des fonctions CRUD dans la base de données en utilisant JSF, Hibernate et MySQL. Le seul problème se produit que lorsque j'implémente le find et getAllRecords, l'application ne fonctionne pas. Certains mes codes sont ci-dessous:JSF et Hibernate Problème dans la recherche d'un enregistrement spécifique à partir de la base de données et l'affichage de toutes les données

BookController.java Classe

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 Classe

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> 

L'erreur pour getAllBooks que je reçois est

javax.el.PropertyNotFoundException: La classe 'java.lang.String' n'a pas la propriété 'book_isbn'.

L'erreur pour Findbook que je reçois est

javax.el.PropertyNotWritableException: Syntaxe illégale pour l'opération Set

+0

À l'avenir, posez une question par question. – BalusC

Répondre

0

Vous retournez un String dans le getAllBook(), de sorte que vous devriez retourner un ArrayList<Book> (getAllBook() de la classe BookController.java)

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

et pour la page trouver, même chose, dans la BookController.java votre méthode ne devrait pas retourner un String, vous devez retourner un objet du livre:

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

.

ajoutez l'attribut update à votre 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> 
+0

Merci pour l'illumination .. Le problème de findBook persiste encore .. Avez-vous autre chose? –

+0

pouvez-vous afficher l'exception renvoyée! –

+0

J'ai ajouté de nouvelles suggestions en réponse, –