Oiá nóis aqui tra vez
Prometo que dessa vez não ou gritar ok galera
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