Boa tarde.
Estou a manhã inteira tentando fazer o filtro do lazy datatable funcionar corretamente mas não sei o que estou fazendo de errado, já estou quase desistindo!
fiz o datatable com basse nesse: ahttp://uaihebert.com/?p=1089 e tive que adaptar ao sistema aqui onde faço estágio, funciona e tal mas o filtro eu não consigo fazer funcionar corretamente!!
ele as vezes funciona normalmente… ai se eu restarto o servidor ele para de funcionar, restarto novamente ele volta a funcionar… e fica nisso…
se alguém puder me ajudar eu agradeço!
solicitacoes.xhtml
<p:fieldset id="infoGeral" toggleable="false" toggleSpeed="500" style="text-align:center">
<h:form id="solicitacoes">
<p:spacer height="10"/>
<p:dataTable id="lazyDataTable" value="#{MbExibeSolicitacoes.solicitacoes}" var="solicitacao" paginator="true" rows="10"
selection="#{MbExibeSolicitacoes.solicitacao}" selectionMode="single"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink}
{PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
currentPageReportTemplate="Página: {currentPage} de {totalPages}"
rowsPerPageTemplate="5,10,15"
lazy="true"
paginatorPosition="bottom"
emptyMessage="Não há solicitações registradas."
style="font-size:11.5px">
<p:column sortBy="#{solicitacao.statusSolicitacao}" filterBy="#{solicitacao.statusSolicitacao}">
<f:facet name="header">Status</f:facet>
<h:outputText value="#{solicitacao.statusSolicitacao}" />
</p:column>
<p:column sortBy="#{solicitacao.titulo}" filterBy="#{solicitacao.titulo}" >
<f:facet name="header">Titulo</f:facet>
<h:outputText value="#{solicitacao.titulo}" />
</p:column>
<p:column sortBy="#{solicitacao.processo}" filterBy="#{solicitacao.processo}">
<f:facet name="header">Número do processo</f:facet>
<h:outputText value="#{solicitacao.processo}" />
</p:column>
<p:column sortBy="#{solicitacao.dataCadastro}" filterBy="#{solicitacao.dataCadastro}">
<f:facet name="header">Data de cadastro</f:facet>
<h:outputText value="#{solicitacao.dataCadastro}" >
<f:convertDateTime pattern="dd/MM/yyyy HH:mm:ss" locale="pt,BR" timeZone="America/Sao_Paulo" />
</h:outputText>
</p:column>
<p:column>
<f:facet name="header">Opções</f:facet>
<p:spacer width="5"/>
<p:commandButton icon="ui-icon-plus" title="Cadastrar pesquisador" />
<p:spacer width="10"/>
<p:commandButton icon="ui-icon-person" title="Visualizar pesquisadores"/>
<p:spacer width="10"/>
<p:commandButton icon="ui-icon-search" title="Visualizar solicitação"/>
<p:spacer width="5"/>
</p:column>
</p:dataTable>
</h:form>
</p:fieldset>
ManagedBeanExibeSolicitacoes.java
@ManagedBean(name="MbExibeSolicitacoes")
@ViewScoped
public class ManagedBeanExibeSolicitacoes {
private LazyDataModel<Solicitacao>solicitacoes = null;
private Solicitacao solicitacao;
private Usuario usuario;
public ManagedBeanExibeSolicitacoes(){
}
public LazyDataModel<Solicitacao> getSolicitacoes() {
if (this.solicitacoes == null) {
this.solicitacoes = FabricaAplicacao.servicoExibeSolicitacoes();
}
return this.solicitacoes;
}
public Solicitacao getSolicitacao() {
if(this.solicitacao == null){
this.solicitacao = new Solicitacao();
}
return solicitacao;
}
public void setSolicitacao(Solicitacao solicitacao) {
this.solicitacao = solicitacao;
}
}
ServicoExibeSolicitacoes.java
public class ServicoExibeSolicitacoes extends LazyDataModel<Solicitacao>{
/**
*
*/
private static final long serialVersionUID = 1L;
private RepositorioSolicitacao repositorioSolicitacao;
private List<Solicitacao> solicitacoes;
private EntityManager entityManager;
public ServicoExibeSolicitacoes(RepositorioSolicitacao repositorioSolicitacao, EntityManager entityManager) {
this.repositorioSolicitacao = repositorioSolicitacao;
this.entityManager = entityManager;
}
@Override
public Object getRowKey(Solicitacao solicitacao) {
return solicitacao.getId();
}
@Override
public Solicitacao getRowData(String idSolicitacao) {
Integer id = Integer.valueOf(idSolicitacao);
for (Solicitacao solicitacao : this.solicitacoes) {
if(id.equals(solicitacao.getId())){
return solicitacao;
}
}
return null;
}
@Override
public List<Solicitacao> load(int inicio, int maximo, String sortField, SortOrder sortOrder, Map<String, String> filters) {
EntityTransaction transacao = this.entityManager.getTransaction();
transacao.begin();
String nomeCampo = "";
String valorCampo = "";
String filtro = "";
for(Iterator<String> it = filters.keySet().iterator(); it.hasNext();) {
nomeCampo = it.next(); //Nome do atributo
valorCampo = filters.get(nomeCampo); //valor do atributo
if((nomeCampo != null && valorCampo != null)){
filtro = "where o."+nomeCampo+" like'%"+valorCampo+"%'";
}else{
filtro = "";
}
}
try{
this.solicitacoes = this.repositorioSolicitacao.buscarRegistros(inicio, maximo, filtro);
transacao.commit();
}catch (Exception e) {
transacao.rollback();
e.printStackTrace();
}
if(getRowCount() <= 0){
setRowCount(this.repositorioSolicitacao.contar(filtro));
}
setPageSize(maximo); //Define o máximo de páginas
return this.solicitacoes;
}
}
repositorio.java
public List<T> buscarRegistros(int inicio, int maximo, String filtro) {
String jpql = "select o from " + classeDominio.getSimpleName() +" o ";
if(filtro != null){
jpql += filtro;
}
Query query = entityManager.createQuery(jpql);
query.setFirstResult(inicio);
query.setMaxResults(maximo);
return query.getResultList();
}
/**
*
* @return Obtém a quantidade de registros
*/
public int contar(String filtro) {
String jpql = "select COUNT(o) from " + classeDominio.getSimpleName() +" o ";
if(filtro != null){
jpql += filtro;
}
Query query = entityManager.createQuery(jpql);
Number resultado = (Number) query.getSingleResult();
return resultado.intValue();
}