title: dataTable doesn't show list
body: <p>I'm trying to render a list of products in a .xhtml page, from my database in Postgres: i'm using the JSF tag h:dataTable. Unfortunately, when I display the page, I get the message "The catalogue is empty", so it seems like it can't get the values from the database.
  This is the page i'm talking about:</p>
  
  <pre><code>&lt;f:metadata&gt;
      &lt;f:viewParam id="prodotto_id" name="id" value="#{prodotto.id}"
          required="true"
          requiredMessage="Invalid page access. Please use a link from within the system."/&gt;
  &lt;/f:metadata&gt;
  &lt;h:message for="prodotto_id" /&gt;
  
  &lt;h:head&gt;
  &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;
  &lt;title&gt;Catalogo&lt;/title&gt;
  &lt;/h:head&gt;
  &lt;h:body&gt;
      &lt;h2&gt;Catalogo Prodotti&lt;/h2&gt;
      &lt;h:form&gt;
          &lt;h:outputText value="The catalogue is empty."
              rendered="#{empty prodottoController.prodotti}" /&gt;
          &lt;h:dataTable value="#{prodottoController.prodotti}" var="prodotto"
              rendered="#{not empty prodottoController.prodotti}"&gt;
              &lt;h:column&gt;
                  &lt;f:facet name="header"&gt;Nome&lt;/f:facet&gt;
                  &lt;h:commandLink action="#{prodottoController.findProdotto}"
                      value="#{prodotto.nome}" style="color: orange"&gt;
                      &lt;f:param name="id" value="#{prodotto.id}" &gt;&lt;/f:param&gt;
                  &lt;/h:commandLink&gt;
              &lt;/h:column&gt;
              &lt;h:column&gt;
                  &lt;f:facet name="header"&gt;Prezzo per unità&lt;/f:facet&gt;
                  &lt;h:outputText value="#{prodotto.prezzo}" /&gt;
              &lt;/h:column&gt;
              &lt;h:column&gt;
                  &lt;f:facet name="header"&gt;Codice&lt;/f:facet&gt;
                  &lt;h:outputText value="#{prodotto.codice}" /&gt;
              &lt;/h:column&gt;
              &lt;h:column&gt;
                  &lt;f:facet name="header"&gt;Quantità in magazzino&lt;/f:facet&gt;
                  &lt;h:outputText value="#{prodotto.quantita}" /&gt;
              &lt;/h:column&gt;
              &lt;h:column&gt;
                  &lt;f:facet name="header"&gt;&lt;/f:facet&gt;
                  &lt;h:commandButton action="/newRigaOrdine.xhtml?faces-redirect=true"
                      value="Aggiungi all'ordine"
                      rendered="#{not empty loginCliente.clienteLoggato.email 
                                  and empty loginAdmin.admin.email}"&gt;
                  &lt;/h:commandButton&gt;
              &lt;/h:column&gt;
              &lt;h:column&gt;
                  &lt;f:facet name="header"&gt;&lt;/f:facet&gt;
                  &lt;h:commandButton action="#{prodottoController.deleteProdotto}"
                      value="Elimina Prodotto"
                      rendered="#{not empty loginAdmin.admin.email and empty loginCliente.clienteLoggato.email}"&gt;
                      &lt;f:param name="id" value="#{prodotto.id}" /&gt;
                  &lt;/h:commandButton&gt;
              &lt;/h:column&gt;
          &lt;/h:dataTable&gt;
          &lt;h:outputLink value="formCreaProdotto.xhtml?faces-    redirect=true"
              rendered="#{not empty loginAdmin.admin.email and empty    loginCliente.clienteLoggato.email}"&gt;Aggiungi un prodotto al catalogo&lt;/h:outputLink&gt;
      &lt;/h:form&gt;
  &lt;/h:body&gt;
  &lt;/html&gt;
  </code></pre>
  
  <p>This is the prodottoController managed bean:</p>
  
  <pre><code> @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&lt;Prodotto&gt; 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
  </code></pre>
  
  <p>And this is the facade method getCatalogoProdotti() :</p>
  
  <pre><code>public List&lt;Prodotto&gt; getCatalogoProdotti() {
  
      try {
          TypedQuery&lt;Prodotto&gt; 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;
          }
      }
  </code></pre>
  
  <p>So, what am I doing wrong?? After hours and hours of studying and searching I really don't know what to do...</p>