数据表不显示列表



我试图呈现产品列表在.xhtml页面,从我的数据库在Postgres:我使用JSF标签h:dataTable。不幸的是,当我显示页面时,我得到消息"目录是空的",所以它似乎无法从数据库中获取值。这就是我正在谈论的页面:

<f:metadata>
    <f:viewParam id="prodotto_id" name="id" value="#{prodotto.id}"
        required="true"
        requiredMessage="Invalid page access. Please use a link from within the system."/>
</f:metadata>
<h:message for="prodotto_id" />
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Catalogo</title>
</h:head>
<h:body>
    <h2>Catalogo Prodotti</h2>
    <h:form>
        <h:outputText value="The catalogue is empty."
            rendered="#{empty prodottoController.prodotti}" />
        <h:dataTable value="#{prodottoController.prodotti}" var="prodotto"
            rendered="#{not empty prodottoController.prodotti}">
            <h:column>
                <f:facet name="header">Nome</f:facet>
                <h:commandLink action="#{prodottoController.findProdotto}"
                    value="#{prodotto.nome}" style="color: orange">
                    <f:param name="id" value="#{prodotto.id}" ></f:param>
                </h:commandLink>
            </h:column>
            <h:column>
                <f:facet name="header">Prezzo per unità</f:facet>
                <h:outputText value="#{prodotto.prezzo}" />
            </h:column>
            <h:column>
                <f:facet name="header">Codice</f:facet>
                <h:outputText value="#{prodotto.codice}" />
            </h:column>
            <h:column>
                <f:facet name="header">Quantità in magazzino</f:facet>
                <h:outputText value="#{prodotto.quantita}" />
            </h:column>
            <h:column>
                <f:facet name="header"></f:facet>
                <h:commandButton action="/newRigaOrdine.xhtml?faces-redirect=true"
                    value="Aggiungi all'ordine"
                    rendered="#{not empty loginCliente.clienteLoggato.email 
                                and empty loginAdmin.admin.email}">
                </h:commandButton>
            </h:column>
            <h:column>
                <f:facet name="header"></f:facet>
                <h:commandButton action="#{prodottoController.deleteProdotto}"
                    value="Elimina Prodotto"
                    rendered="#{not empty loginAdmin.admin.email and empty loginCliente.clienteLoggato.email}">
                    <f:param name="id" value="#{prodotto.id}" />
                </h:commandButton>
            </h:column>
        </h:dataTable>
        <h:outputLink value="formCreaProdotto.xhtml?faces-    redirect=true"
            rendered="#{not empty loginAdmin.admin.email and empty    loginCliente.clienteLoggato.email}">Aggiungi un prodotto al catalogo</h:outputLink>
    </h:form>
</h:body>
</html>

这是prodottoController管理的bean:

 @ManagedBean (name="prodottoController")
@ViewScoped
public class ProdottoController implements Serializable {

    private static final long serialVersionUID = 1L;

    private Long id;
    private String nome;
    private Float prezzo;
    private String descrizione;
    private String codice;
    private int quantita;
    private String errore;
    private Prodotto prodotto;
    private List<Prodotto> prodotti;
    @EJB (beanName="pFacade")
    private ProdottoFacade pFacade;

    public String creaProdotto() {
        try {
            this.prodotto = pFacade.creaProdotto(nome, codice, descrizione, prezzo, quantita);
            return "newProdotto"; 
            }
        catch (Exception e) {
            errore="Prodotto già esistente sul database. Per favore inserisci un prodotto con codice differente";
            return errore; 
        }
    }
    public String listProdotti() {
        this.prodotti = pFacade.getCatalogoProdotti();
        return "showProdotti"; 
    }
    public String findProdotto() {
        this.prodotto = pFacade.getProdottoByID(id);
        return "showProdotto";
    }
    public String deleteProdotto() {   
        pFacade.deleteProdottoById(id);
        return "showProdotti";
    } //getters and setters

这是facade方法getcataloggoprodotti ():

public List<Prodotto> getCatalogoProdotti() {
    try {
        TypedQuery<Prodotto> q = em.createQuery("SELECT p FROM Prodotto p", Prodotto.class);
        return q.getResultList();
    } 
    catch (Exception e) {
        String q = "la lista è vuota";
        System.out.println(q);
        return null;
        }
    }

那么,我做错了什么??经过几个小时的研究和搜索,我真的不知道该怎么办……

我已经找到了解决方案!希望这能帮助到有我同样问题的人。

我添加了这个

    @PostConstruct
public void init() {
    prodotti = pFacade.getCatalogoProdotti();
} 

中的prodottoController bean,现在它显示了数据库上的所有产品!!PostConstruct必须在每次我们使用ViewScoped bean时使用,正如我在互联网上看到的那样。而且实体类"Prodotto"必须实现Serializable

相关内容

  • 没有找到相关文章

最新更新