2016-12-28 24 views
1

CDTとJSFを使用して、データベース内のすべての書籍のリストをdataTable形式でWebページに印刷しようとしていますが、代わりに空のページが表示されます。私もdataTableの代わりにJSFのselectOneMenuを使用しようとしましたが、結果は同じです。h:dataTableはレコードを表示しません

Here`sページのコード

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://xmlns.jcp.org/jsf/html" 
     xmlns:ui="http://xmlns.jcp.org/jsf/facelets" 
     xmlns:f="http://xmlns.jcp.org/jsf/core"> 
    <head> 
     <title>Publish a book</title> 
    </head> 
    <h:body> 
     <ui:define name="content"> 
      <h:dataTable value="#{pub.allBooks}" var="c"> 
       <h:column>#{c.title}</h:column> 
      </h:dataTable> 
     </ui:define> 
    </h:body> 
</html> 

コントローラ

import javax.annotation.ManagedBean; 
import javax.annotation.PostConstruct; 
import javax.enterprise.inject.Model; 
import javax.enterprise.inject.Produces; 
import javax.faces.context.FacesContext; 
import javax.inject.Inject; 
import javax.inject.Named; 
import java.util.List; 

@Model 
@ManagedBean("pub") 
public class PublishABookController { 

    @Inject 
    PublishABook publishABook; 

    @Inject 
    FacesContext facesContext; 

    @Produces 
    @Named 
    List<Book> allBooks; 

    @PostConstruct 
    public void initBooks(){ 
     allBooks = publishABook.getAllBooks(); 
    } 
} 

サービス

import javax.ejb.Stateless; 
import javax.inject.Inject; 
import java.util.List; 
import java.util.logging.Logger; 

@Stateless 
public class PublishABookImpl implements PublishABook { 

    @Inject 
    private PublisherDAO publisherDAO; 

    @Inject 
    private BookDAO bookDAO; 

    @Inject 
    private Logger logger; 

    @Override 
    public void publishABook(Publisher publisher, Book book) { 
      bookDAO.save(book); 
      publisher.getPublishedBooks().add(book); 
      publisherDAO.update(publisher); 
      logger.info("Book created"); 
    } 

    @Override 
    public List<Book> getAllBooks() { 
     return bookDAO.list(); 
    } 
} 
+0

何をデバッグしましたか?プロデューサーから 'allBooks'を利用できるようにしている間に、なぜあなたは '#{pub.allBooks} 'を使っていますか? jsf開発モードでアプリケーションを実行する際にエラーが発生しますか?そしてそれが別のコンポーネントで失敗した場合、なぜあなたはそれをタグ付けできませんでしたか?その原因は他にもありそうです。平凡な「ui:repeat」を試しましたか? – Kukeltje

答えて

0

あなただけのページから<ui:define name="content"></define>要素を削除する必要があります。

ui:defineは、JSFページのテンプレート作成によく使用されますが、あなたのコンテキストでは、ページのコンテンツのレンダリングを妨げるだけです。

関連する問題