pessoal, implementei a rotina abaixo, porem contem registro no meu banco de dados, porem nao aparece nenhum registro no datatable, segue abaixo o meu codito :
****bean
private List<Cadusu> cadusu;
private LazyDataModel<Cadusu> dataModel;
public LazyDataModel<Cadusu> getDataModel() {
@Override
public List<Cadusu> load(int first, int pageSize, String string, boolean bln, Map<String, String> map) {
List<Cadusu> list = cadususervico.buscafindCadusu(first, pageSize);
return list;
} */
@Override
public List<Cadusu> load(int i, int i1, String string, SortOrder so, Map<String, String> map) {
List<Cadusu> list = cadususervico.buscafindCadusu(i, i1);
return list;
}
};
dataModel.setPageSize(10);
}
return dataModel;
}
****dao
@Interceptors({GerenciaTransacaoInterceptor.class})
public List<Cadusu> findCadusu(int startingAt, int maxPerPage) {
String query = "select u from Cadusu u where u.status = 'ATIVO'";
emAux.createQuery(query).setHint("eclipselink.refresh", true).
setFirstResult(startingAt).setMaxResults(maxPerPage).getResultList();
return (List<Cadusu>) emAux.createQuery(query).getResultList();
}
**********View
<p:dataTable id="lazyDataTablenovo" value="#{cadguiaMbean.dataModel}" var="cadusu" paginator="true" rows="10"
dynamic="true"
lazy="true"
selection="#{cadguiaMbean.cadusu}" selectionMode="single"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="5,10,15" style="width: 80%;margin-left: 10%;margin-right: 10%;">
<p:ajax event="rowSelect" update=":playerDialogForm" oncomplete="playerDetails.show()" />
<p:column>
<f:facet name="header">Name</f:facet>
<h:outputText value="#{cadusu.nomeusu}" />
</p:column>
</p:dataTable>
Alguem pode me dar alguma dica ??
Está lançando alguma exceção?
LazyInizializationException ??
Aonde eu coloco essa excecao?
Não sei se entendeu direito, mas eu perguntei se seu código lança alguma exceção.
nao sei se ajuda:
o exemplo abaixo eu fiz e funcionou na boa
xhtml
<p:dataTable id="tabela1" value="#{usuariobibJsfBean.usuariosList}" var="item"
emptyMessage="Nenhum registro encontrado."
paginator="true" rows="25" pageLinks="10"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks}
{NextPageLink} {LastPageLink} Registros por página: {RowsPerPageDropdown}"
rowsPerPageTemplate="15,25,35,50" lazy="true">
<f:facet name="header">
#{usuariobibJsfBean.usuariosList.rowCount} registros encontrados. // contas os registros
</f:facet>
<p:column headerText="Código" style="width:07%">
<h:outputText value="#{item.usuCodigo}" />
</p:column>
// continua
bean
// declaração
private LazyDataModel<Usuariobib> usuariosList;
// metodo
usuariosList = new LazyDataModel<Usuariobib>() {
@Override
public List<Usuariobib> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
return u.listaUsuariobibPaginada(montaParametros(), first, pageSize, sortField, sortOrder);
// retorna a lista lazy
}
};
usuariosList.setRowCount(u.listaUsuariobibCount(montaParametros()));
// funcao que conta os registros
}
service
@Interceptors(AuditInterceptor.class)
public List<Usuariobib> listaUsuariobibPaginada(Map<String, Object> montaParametros, int first, int pageSize, String sortField, org.primefaces.model.SortOrder sortOrder) {
log.debug("########### sortField: " + sortField);
log.debug("########### sortOrder: " + sortOrder);
String orderBy = ServiceUtil.montaOrderBy(sortField, true, PREFIXO_OBJETO);
FiltrosConsulta filtros = criaFiltros(montaParametros);
return crudService.executeQuery(QUERY_Usuarios, orderBy, first, pageSize, filtros, null);
}
@TransactionAttribute(TransactionAttributeType.NEVER)
public int listaUsuariobibCount(Map<String, Object> montaParametros) {
FiltrosConsulta filtros = criaFiltros(montaParametros);
Long resultado = (Long) crudService.executeQuery("select COUNT(u) from Usuariobib u ", null, filtros).get(0);
return resultado.intValue();
}
valeu !
Vlw poderia postar os metodos:
Serviceutil.montaorderby e
Crudservice.executaquery
Muito obrigado
***************** View
<p:dataTable id="lazyDataTablenovo1" value="#{cadguiaMbean.usuariosList}" var="cadusu" pemptyMessage="Nenhum registro encontrado."
paginator="true" rows="25" pageLinks="10"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks}
{NextPageLink} {LastPageLink} Registros por página: {RowsPerPageDropdown}"
rowsPerPageTemplate="15,25,35,50" lazy="true">
<p:column>
<f:facet name="header">Name</f:facet>
<h:outputText value="#{cadusu.nomeusu}" />
</p:column>
</p:dataTable>
***************** Bean
private List<Cadusu> cadusu;
private LazyDataModel<Cadusu> usuariosList;
@Override
public void iniciarView() {
item = listaespec();
usuariosList = new LazyDataModel<Cadusu>() {
@Override
public List<Cadusu> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
return cadususervico.buscafindCadusu(first, pageSize);
// retorna a lista lazy
}
};
usuariosList.setRowCount(cadususervico.buscacountCadusuTotal());
// funcao que conta os registros
}
Esta aparecendo os registro , porem gostaria de usar o “filterBy” como ficaria o meu “load” do meu bean ???
Pessoal, consegui fazer o filtro da seguinte forma :
public List<Cadusu> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
int paginacao;
paginacao = 0;
for(Iterator<String> it = filters.keySet().iterator(); it.hasNext();) {
String filterProperty = it.next(); // table column name = field name
System.out.println("filterProperty is: " + filterProperty);
String filterValue = filters.get(filterProperty);
System.out.println("filterValue is: " + filterValue);
String Clausula = "and u."+filterProperty+" like'%"+filterValue+"%'";
System.out.println("filterValue is: " + Clausula);
paginacao=1;
cadusu = cadususervico.buscafindCadusu(first, pageSize,Clausula);
}
// return cadususervico.buscafindCadusu(first, pageSize,"");
if (paginacao==0){
cadusu = cadususervico.buscafindCadusu(first, pageSize,"");
}
return cadusu;
}
};
usuariosList.setRowCount(cadususervico.buscacountCadusuTotal());
***************************** dao
public List<Cadusu> findCadusu(int startingAt, int maxPerPage,String clausulapage) {
String query="";
if (clausulapage == ""){
String queryinterna = "select u from Cadusu u where u.status = 'ATIVO'";
query=queryinterna;
}
if (clausulapage != ""){
String queryinterna = "select u from Cadusu u where u.status = 'ATIVO'"+clausulapage;
query=queryinterna;
}
emAux.createQuery(query).setHint("eclipselink.refresh", true).
setFirstResult(startingAt).setMaxResults(maxPerPage).getResultList();
return (List<Cadusu>) emAux.createQuery(query).getResultList();
}
O problema agora nao esta paginando , alguem pode me ajudar ??
depois de muita luta e batalha, consegui fazer o Lazy…
segue abaixo a solucao do problema de cima
return (List<Cadusu>) emAux.createQuery(query).setHint("eclipselink.refresh", true).
setFirstResult(startingAt).setMaxResults(maxPerPage).getResultList();
Obrigado a todos