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