Rich:extendedDataTable não retorna os registros

Oiá nóis aqui tra vez :smiley:

Prometo que dessa vez não ou gritar ok galera :slight_smile:

Estou tentando implementar uma rich:extendedDataTable usando JPA+Hibernate e esta dando esse erro:

Nenhum… apenas aparece o grid dizendo NO DATA

Antes de mais nada, como teste estou colocando uma tabela de endereços de 1 milhão de registros, mas estou restringindo a 10 registros por pagina ok.

Segue abaixo os meus codigos:

Pagina XHTML:

<?xml version="1.0" encoding="UTF-8"?>
<!--
To change this template, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<ui:composition template="../../index.xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:a4j="http://richfaces.org/a4j"
                xmlns:rich="http://richfaces.org/rich">
    <ui:define name="principal">
        <h:form id="frmEndereco">
            <h:panelGrid columns="2" columnClasses="top , top">
                <rich:extendedDataTable
                    value="#{enderecoBean.enderecoDataModel}" var="item" id="table"
                    width="580px" height="400px"
                    sortMode="#{enderecoBean.sortMode}"
                    selectionMode="#{enderecoBean.selectionMode}"
                    tableState="#{enderecoBean.tableEndereco}"
                    selection="#{enderecoBean.selection}"
                    rows="10" reRender="ds">
                    <rich:column sortable="true" sortBy="#{item.numCep}" id="col_1"
                                 filterBy="#{item.numCep}" filterEvent="onkeyup" width="170px"
                                 label="C.E.P.">
                        <f:facet name="header">
                            <h:outputText value="C.E.P." id="num_cep"/>
                        </f:facet>
                        <h:outputText value="#{item.numCep}" id="item_numcep"/>
                    </rich:column>
                    <rich:column sortable="true" sortBy="#{item.dscLogradouro}" id="col_2"
                                 filterBy="#{item.dscLogradouro}" filterEvent="onkeyup" width="170px"
                                 label="Logradouro">
                        <f:facet name="header">
                            <h:outputText value="Logradouro" id="dsc_logradouro"/>
                        </f:facet>
                        <h:outputText value="#{item.dscLogradouro}" id="item_dsclogradouro"/>
                    </rich:column>
                    <rich:column sortable="true" sortBy="#{item.dscComplemento}" id="col_3"
                                 filterBy="#{item.dscComplemento}" filterEvent="onkeyup" width="170px"
                                 label="Complemento">
                        <f:facet name="header">
                            <h:outputText value="Complemento" id="dsc_complemento"/>
                        </f:facet>
                        <h:outputText value="#{item.dscComplemento}" id="item_dsccomplemento"/>
                    </rich:column>
                    <a4j:support reRender="selectiontable" id="extended_table_bean_take_selection"
                                 action="#{enderecoBean.takeSelection}"
                                 event="onselectionchange" />
                    <f:facet name="footer">
                        <rich:datascroller id="ds"></rich:datascroller>
                    </f:facet>
                </rich:extendedDataTable>
            </h:panelGrid>
            <h:panelGroup layout="block" style="width:250px">
                <rich:panel>
                    <f:facet name="header">
                        <h:outputText value="Currently selected rows:" />
                    </f:facet>
                    <rich:dataTable value="#{enderecoBean.selectedEndereco}"
                                    var="sel" id="selectiontable">
                        <rich:column>
                            <h:outputText value="#{sel.numCep}" />
                        </rich:column>
                        <rich:column>
                            <h:outputText value="#{sel.dscLogradouro}" />
                        </rich:column>
                        <rich:column>
                            <h:outputText value="#{sel.dscComplemento}" />
                        </rich:column>
                    </rich:dataTable>
                </rich:panel>
            </h:panelGroup>
        </h:form>
    </ui:define>

</ui:composition>

ManagedBean

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.cep.jsf;

import br.cep.entity.CepEndereco;
import br.cep.jpa.CepEnderecoJpaController;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.richfaces.model.DataProvider;
import org.richfaces.model.ExtendedTableDataModel;
import org.richfaces.model.selection.Selection;
import org.richfaces.model.selection.SimpleSelection;

/**
 *
 * @author joao
 */
public class enderecoBean {

    private String sortMode = "single";
    private String selectionMode = "single";
    private Object tableEndereco;
    private Selection selection = new SimpleSelection();
    private List<CepEndereco> enderecos = new ArrayList<CepEndereco>();
    private ExtendedTableDataModel<CepEndereco> dataModel;
    private List<CepEndereco> selectedEndereco = new ArrayList<CepEndereco>();
    private CepEnderecoJpaController enderecoJPA = new CepEnderecoJpaController();

    /** Creates a new instance of enderecoBean */
    public enderecoBean() {
    }

    public void takeSelection() {
        selectedEndereco.clear();
        Iterator<Object> iterator = getSelection().getKeys();
        while (iterator.hasNext()) {
            Object key = iterator.next();
            selectedEndereco.add(getEnderecoDataModel().getObjectByKey(key));
        }
    }

    public ExtendedTableDataModel<CepEndereco> getEnderecoDataModel() {
        if (dataModel == null) {
            dataModel = new ExtendedTableDataModel<CepEndereco>(new DataProvider<CepEndereco>() {

                private static final long serialVersionUID = 5054087821033164847L;

                public CepEndereco getItemByKey(Object key) {
                    for (CepEndereco c : enderecos) {
                        if (key.equals(getKey(c))) {
                            return c;
                        }
                    }
                    return null;
                }

                public List<CepEndereco> getItemsByRange(int firstRow, int endRow) {
                    List<CepEndereco> listEnd = enderecoJPA.findCepEnderecoPage(firstRow, endRow);
                    return listEnd;
                }

                public Object getKey(CepEndereco item) {
                    return item.getNumCep();
                }

                public int getRowCount() {
                    return enderecoJPA.getCepEnderecoCount();
                }
            });
        }
        return dataModel;
    }

    public String getSortMode() {
        return sortMode;
    }

    public void setSortMode(String sortMode) {
        this.sortMode = sortMode;
    }

    public String getSelectionMode() {
        return selectionMode;
    }

    public void setSelectionMode(String selectionMode) {
        this.selectionMode = selectionMode;
    }

    public void setEnderecos(List<CepEndereco> enderecos) {
        this.enderecos = enderecos;
    }

    public Object getTableEndereco() {
        return tableEndereco;
    }

    public void setTableEndereco(Object endereco) {
        this.tableEndereco = tableEndereco;
    }

    public Selection getSelection() {
        return selection;
    }

    public void setSelection(Selection selection) {
        this.selection = selection;
    }

    public List<CepEndereco> getSelectedEndereco() {
        return selectedEndereco;
    }

    public void setSelectedEndereco(List<CepEndereco> selectedEndereco) {
        this.selectedEndereco = selectedEndereco;
    }
}

JPA

Percebam que fiz para ter certeza que ia retornar os 10 primeiros registros.

public List<CepEndereco> findCepEnderecoPage(int maxResults, int firstResult) {
        EntityManager em = getEntityManager();
        String cSql = "select cod_logradouro,dsc_logradouro,dsc_complemento,num_cep,cod_bairro ";
               cSql += "from cep_endereco ";
               cSql += "order by num_cep ";
               cSql += "limit 10 offset 0";
        try {
            Query q = em.createNativeQuery(cSql);
            q.setHint("org.hibernate.cacheMode", CacheMode.REFRESH);
            q.setHint("org.hibernate.cacheable", true);
            return q.getResultList();
        } finally {
            em.close();
        }
    }

Arquivo faces-config.xml

<?xml version='1.0' encoding='UTF-8'?>

<!-- =========== FULL CONFIGURATION FILE ================================== -->

<faces-config version="1.2" 
              xmlns="http://java.sun.com/xml/ns/javaee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
    <application>
        <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
    </application>
    <application>
        <el-resolver>br.cep.jsf.util.JsfCrudELResolver</el-resolver>
    </application>
    <navigation-rule>
        <navigation-case>
            <from-outcome>welcome</from-outcome>
            <to-view-id>/index.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>
    <managed-bean>
        <managed-bean-name>usuario</managed-bean-name>
        <managed-bean-class>br.cep.jsf.UsuarioController</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
    <managed-bean>
        <managed-bean-name>usuarioJpa</managed-bean-name>
        <managed-bean-class>br.cep.jpa.UsuarioJpaController</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
    <converter>
        <converter-for-class>br.cep.entity.Usuario</converter-for-class>
        <converter-class>br.cep.jsf.UsuarioConverter</converter-class>
    </converter>
    <navigation-rule>
        <navigation-case>
            <from-outcome>usuarios</from-outcome>
            <to-view-id>/pages/usuario/usuario.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>
    <managed-bean>
        <managed-bean-name>enderecoBean</managed-bean-name>
        <managed-bean-class>br.cep.jsf.enderecoBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
        <managed-property>
            <property-name>enderecos</property-name>
            <value>#{org.cep.jpa.CepEnderecoJpaController}</value>
        </managed-property>
    </managed-bean>
    <navigation-rule>
        <navigation-case>
            <from-outcome>endereco</from-outcome>
            <to-view-id>/pages/endereco/endereco.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>
</faces-config>

Amigos, a minha intensão é o classico, grid em cima e quando clico em cima de uma linha mostre os dados em forma de edição (Master/Detail)

Desde já agradeço qualquer ajuda…

Abraços

Jomello

coloque os codigos entre as tags code para facilitar visualização

ex:

public static void main 

Putz Thiago, desculpe mas sou cabeça de bagre, como eu faço isso??

Tenho que postar tudo novamente ou tem como editar o meu post original?

Abraços

Jomello

Acho que o cabeção que vos fala conseguiu :slight_smile:

Abraços

Jomello

Hummmm… Consegui arrumar outro erro, o qe não resolveu nada :slight_smile:

Aguem pleaseeee???/ :stuck_out_tongue: :smiley:

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: [Ljava.lang.Object; cannot be cast to br.cep.entity.CepEndereco
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)
	org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206)
	org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
	org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
	org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

root cause

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to br.cep.entity.CepEndereco
	br.cep.jsf.enderecoBean$1.getKey(enderecoBean.java:47)
	org.richfaces.model.ExtendedTableDataModel.getKey(ExtendedTableDataModel.java:185)
	org.richfaces.model.ExtendedTableDataModel.walk(ExtendedTableDataModel.java:119)
	org.richfaces.model.ModifiableModel.modify(ModifiableModel.java:226)
	org.richfaces.model.ExtendedTableDataModifiableModel.modify(ExtendedTableDataModifiableModel.java:114)
	org.richfaces.component.UIExtendedDataTable.createDataModel(UIExtendedDataTable.java:376)
	org.ajax4jsf.component.UIDataAdaptorBase.getExtendedDataModel(UIDataAdaptorBase.java:621)
	org.ajax4jsf.component.UIDataAdaptorBase.getRowCount(UIDataAdaptorBase.java:248)
	org.richfaces.renderkit.html.ExtendedDataTableRenderer.doEncodeBegin(ExtendedDataTableRenderer.java:284)
	org.richfaces.renderkit.html.ExtendedDataTableRenderer.doEncodeBegin(ExtendedDataTableRenderer.java:196)
	org.ajax4jsf.renderkit.RendererBase.encodeBegin(RendererBase.java:100)
	org.richfaces.renderkit.AbstractExtendedTableRenderer.encodeBegin(AbstractExtendedTableRenderer.java:1365)
	javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:788)
	javax.faces.component.UIData.encodeBegin(UIData.java:879)
	org.ajax4jsf.component.UIDataAdaptorBase.encodeBegin(UIDataAdaptorBase.java:1225)
	com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:269)
	com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:242)
	javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
	javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
	javax.faces.render.Renderer.encodeChildren(Renderer.java:137)
	javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
	javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
	javax.faces.component.UIComponent.encodeAll(UIComponent.java:892)
	com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:592)
	org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100)
	org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176)
	com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
	com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
	com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
	org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206)
	org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
	org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
	org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.20 logs.
Apache Tomcat/6.0.20