[RESOLVIDO] Datatable JSF + RichFaces

9 respostas
glock

Boa noite pessoal,

Estou com um problema ao tentar popular uma listagem que vem do banco de dados. Aparece o cabeçalho da tabela, porem não vem populada. Abaixo o codigo do datatable:

<rich:dataTable value="#{rICEntradaControl.listaRecibo}" var="reciboDeEntrada">
                                    
                                    <rich:column sortBy="#{reciboDeEntrada.id}" style="text-align: center">
                                        <f:facet name="header">
                                            <h:outputText value="Id" />
                                        </f:facet>
                                        <h:outputText value="#{reciboDeEntrada.id}" />
                                    </rich:column>
                                    
                                    <rich:column sortBy="#{reciboDeEntrada.situacao}" style="text-align: center">
                                        <f:facet name="header">
                                            <h:outputText value="Situação" />
                                        </f:facet>
                                        <h:outputText value="#{reciboDeEntrada.situacao}" />
                                    </rich:column>
                                    
                                    <rich:column sortBy="#{reciboDeEntrada.data}" style="text-align: center">
                                        <f:facet name="header">
                                            <h:outputText value="Data" />
                                        </f:facet>
                                        <h:outputText value="#{reciboDeEntrada.data}">
                                            <f:convertDateTime pattern="dd/MM/yyyy" />
                                        </h:outputText>
                                    </rich:column>

                                </rich:dataTable>

No Maneged Bean :

public void setListarPosicaoSemContainer(
            List<LocalDeArmazenagem> listarPosicaoSemContainer) {
        this.listarPosicaoSemContainer = listarPosicaoSemContainer;
    }

    public List<RICEntrada> getListaRecibo() {
        
        return listarRicEntrada;
    }

[]'s

9 Respostas

Hebert_Coelho

Coloca seu MB todo aí.

glock

Coloquei parte do MB, por ser muito extenso:

import java.io.Serializable;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import DAO.RicEntradaDAO;
import model.LocalDeArmazenagem;
import model.RICEntrada;
import model.Usuario;

@ManagedBean
@SessionScoped
public class RICEntradaControl implements Serializable {

    private static final long serialVersionUID = -1135071202103921241L;
    private RICEntrada ricEntrada;
    private List<String> listarPracaDeArmazenagem;
    private List<String> listarFilaDeArmazenagem;
    private List<String> listarAlturaDeArmazenagem;
    private List listarTipoDeContainer = new ArrayList();
    private List listarTipoDeSituacaoDeRic = new ArrayList();
    private List<LocalDeArmazenagem> listarPosicaoSemContainer = new ArrayList<LocalDeArmazenagem>();
    private List<RICEntrada> listarRicEntrada = new ArrayList<RICEntrada>();

    /*
     * CONSTRUTORES
     */
    public RICEntradaControl() {
        ricEntrada = new RICEntrada();
    }

    /*
     * METODOS
     */
    public String cadastrarRicEntrada() {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        HttpServletRequest request = (HttpServletRequest) facesContext.getExternalContext().getRequest();
        Connection conexao = (Connection) request.getAttribute("conexao");
        HttpSession session = request.getSession();
        FacesMessage msg = new FacesMessage();
        String retorno = "";
        Usuario usuarioCadastro = (Usuario) session.getAttribute("UsuarioLogado");
        ricEntrada.getUsuarioInsert().setId(usuarioCadastro.getId());
        retorno = new RicEntradaDAO(conexao).cadastraRicEntrada(ricEntrada);

        if (retorno.indexOf("ERRO") == -1) {
            msg.setSeverity(FacesMessage.SEVERITY_INFO);
            ricEntrada = new RICEntrada();
        } else {
            msg.setSeverity(FacesMessage.SEVERITY_ERROR);
        }
        msg = new FacesMessage(retorno);
        facesContext.addMessage("msg", msg);
        return "entradacontainer";
    }

    public String alterarRicEntrada() {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        HttpServletRequest request = (HttpServletRequest) facesContext.getExternalContext().getRequest();
        Connection conexao = (Connection) request.getAttribute("conexao");
        FacesMessage msg = new FacesMessage();
        HttpSession session = request.getSession();
        String retorno = "";
        Usuario usuarioCadastro = (Usuario) session.getAttribute("UsuarioLogado");
        ricEntrada.getUsuarioUpdate().setId(usuarioCadastro.getId());
        retorno = new RicEntradaDAO(conexao).alteraRicEntrada(ricEntrada);

        if (retorno.indexOf("ERRO") == -1) {
            ricEntrada = new RICEntrada();
            msg.setSeverity(FacesMessage.SEVERITY_ERROR);
        } else {
            msg.setSeverity(FacesMessage.SEVERITY_INFO);
        }
        msg = new FacesMessage(retorno);
        facesContext.addMessage("msg", msg);
        return "entradacontainer";
    }

    /*
     * GETTERS & SETTERS
     */
    public RICEntrada getRicEntrada() {
        if (ricEntrada == null) {
            ricEntrada = new RICEntrada();
        }
        return ricEntrada;
    }

    public void setRicEntrada(RICEntrada ricEntrada) {
        this.ricEntrada = ricEntrada;
    }

    public List<RICEntrada> getListaRecibo() {
        
        return listarRicEntrada;

    }

    public void setListaRecibo(List<RICEntrada> listarRicEntrada) {
        this.listarRicEntrada = listarRicEntrada;
    }
}

No bean criei uma variavel do tipo List chamado listaRecebido, fiz o get e set desta variavel:

protected List listaRecibo;

    public List getListaRecibo() {
        return listaRecibo;
    }

    public void setListaRecibo(List lista) {
        this.listaRecibo = lista;
    }

E no DAO fiz um metodo com o mesmo nome:

public List<RICEntrada> getlistaRecibo() {...}

Fiz um debug no metodo do DAO e está ok.

jv.nicocelli

Bom dia,

O seu <rich:dataTable> está dentro do form?

glock

Não esta dentro de um form, esta dentro de um panel. Teria que colocar dentro de um form?

jv.nicocelli

Precisa sim

Exemplo:

&lt;h:form id="cadCliente"&gt;
				&lt;rich:panel styleClass="#panel"&gt;
					&lt;f:facet name="header"&gt;
						&lt;h:outputText value="Cadastro de Fornecedores" /&gt;
					&lt;/f:facet&gt;
					&lt;rich:dataTable id="fornecedor" rows="10"
						value="#{fornecedorBean.todos}" var="forns"&gt;
						&lt;f:facet name="header"&gt;
							&lt;rich:toolbar id="toolbar" styleClass="toolbar"
								itemSeparator="line"&gt;
								&lt;rich:toolbarGroup itemSeparator="line"&gt;
									&lt;h:commandButton action="#{fornecedorBean.novoFornecedor}"
										id="new" image="/images/new.png"&gt;
									&lt;/h:commandButton&gt;
									&lt;h:inputText id="serch" /&gt;
									&lt;h:commandLink value="Pesquisar" /&gt;
								&lt;/rich:toolbarGroup&gt;
							&lt;/rich:toolbar&gt;
							&lt;rich:columnGroup&gt;
								&lt;h:column&gt;
									&lt;h:outputText value="Id" /&gt;
								&lt;/h:column&gt;
								&lt;h:column&gt;
									&lt;h:outputText value="Nome" /&gt;
								&lt;/h:column&gt;
								&lt;h:column&gt;
									&lt;h:outputText value="" /&gt;
								&lt;/h:column&gt;
								&lt;h:column&gt;
									&lt;h:outputText value="" /&gt;
								&lt;/h:column&gt;

							&lt;/rich:columnGroup&gt;
						&lt;/f:facet&gt;
						&lt;h:column&gt;
							&lt;h:outputText value="#{forns.id}" /&gt;
						&lt;/h:column&gt;
						&lt;h:column&gt;
							&lt;h:outputText value="#{forns.nome}" /&gt;
						&lt;/h:column&gt;
						&lt;h:column&gt;
							&lt;h:commandButton action="#{fornecedorBean.editar}"
								image="/images/edit.gif" /&gt;
						&lt;/h:column&gt;
						&lt;h:column&gt;
							&lt;h:commandButton action="#{fornecedorBean.excluir}"
								image="/images/remove.png" /&gt;
						&lt;/h:column&gt;
						&lt;f:facet name="footer"&gt;
							&lt;rich:dataScroller pageIndexVar="pageIndex" pagesVar="pages"&gt;
								&lt;f:facet name="pages"&gt;
									&lt;h:outputText value="#{pageIndex}/#{pages}" /&gt;
								&lt;/f:facet&gt;
							&lt;/rich:dataScroller&gt;
						&lt;/f:facet&gt;
					&lt;/rich:dataTable&gt;
				&lt;/rich:panel&gt;
			&lt;/h:form&gt;
glock

Boa noite,

Segui sua dica nicocelli, porem não deu certo. Revendo o codigo, vi que não tinha nada que chamava o metodo do DAO. Decidi então no MB, no getListaRecibo instanciar o metodo do DAO, como segue abaixo:

protected List listaRecibo;

    public List getListaRecibo() {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        HttpServletRequest request = (HttpServletRequest) facesContext.getExternalContext().getRequest();
        Connection conexao = (Connection) request.getAttribute("conexao");
        listarRicEntrada = new RicEntradaDAO(conexao).getlistaRecibo();
        
        return listarRicEntrada;
    }

    public void setListaRecibo(List lista) {
        this.listaRecibo = lista;
    }

Fiz o teste novamente, porem retornou somente um unico registro do banco de dados e duplicou a informção trazida do banco. Nâo listou todos os registros corretamente. O pode ser feito?

[]'s

glock

alguem pode dar uma ajuda para o problema descrito acima?

Desde já agradeço.
[]'s

alias

Os dados estão vindo corretamente da base de dados, a list que está alimentando o datatable tá certinha? Se os dados estão vindo duplicados o problema provavelmente está na sua query.

Apenas garanta que sua lista esteja adequadamente populada e amarra ela com o “value” do datatable, que nao tem erro.

glock

Era isto mesmo, estava com problema no método do DAO. Não era de query e sim da instancia no inicio do metodo:

List<RICEntrada> recibosDeEntrada = new ArrayList<RICEntrada>(); RICEntrada umaRic = new RICEntrada();

Retirei a variavel umaRic e coloquei dentro do while do ResultSet e funcionou!

Obrigados a todos.
[]'s

Criado 11 de março de 2012
Ultima resposta 13 de mar. de 2012
Respostas 9
Participantes 4