postgresql - dataTable doesn't show list -
this question has answer here:
i'm trying render list of products in .xhtml page, database in postgres: i'm using jsf tag h:datatable. unfortunately, when display page, message "the catalogue empty", seems can't values database. page i'm talking about:
<f:metadata> <f:viewparam id="prodotto_id" name="id" value="#{prodotto.id}" required="true" requiredmessage="invalid page access. please use link within 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 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 , 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 , 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 , empty logincliente.clienteloggato.email}">aggiungi un prodotto al catalogo</h:outputlink> </h:form> </h:body> </html>
this prodottocontroller managed 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 , setters
and facade method getcatalogoprodotti() :
public list<prodotto> getcatalogoprodotti() { try { typedquery<prodotto> q = em.createquery("select p prodotto p", prodotto.class); return q.getresultlist(); } catch (exception e) { string q = "la lista è vuota"; system.out.println(q); return null; } }
so, doing wrong?? after hours , hours of studying , searching don't know do...
i've found solution guys! hope helps had same problem.
i added this
@postconstruct public void init() { prodotti = pfacade.getcatalogoprodotti(); }
in prodottocontroller bean, , shows products on database!! postconstruct must used everytime use viewscoped bean, i've read across internet. uh, , entity class "prodotto" has implement serializable.
Comments
Post a Comment