Prezados,
eu possuo uma tela com bairros no p:dataTable com filtros e com um botão para poder alterar.
Eu coloco as iniciais no filtro e o dataTable mostra os bairros apenas com aquelas iniciais.
Então eu clico no botão alterar e sou[color=red] redirecionado[/color] para outra tela para fazer a alteração.
Ao fazer a alteração, posso clicar no link para ser redirecionado a tela do dataTable.
Aí que está o problema.
O dataTable mostra o bairro ainda com o nome antigo, mas quando insiro qualquer coisa no filtro ele recarrega a tabela
mostrando os dados corretos.
Gostaria de entender este problema e saber como faço para atualizar este dataTable sem ter que inserir algum caracter no filtro.
Desde já, agradeço a ajuda!
Boa tarde!
No seu método que salva você pode forçar a atualização do datatable.
Exemplo:
O Datatable
<p:dataTable id="tbl" value="#{pacienteBean.lista}" var="paciente"
rendered="#{!empty pacienteBean.lista}" paginator="true" rows="20"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="10,20,30,40,50,100"
emptyMessage="Nenhum registro corresponde à sua pesquisa."
currentPageReportTemplate="{totalRecords} paciente(s) encontrado(s). Página {currentPage} de {totalPages}.">
.....
O método que atualiza os dados no BD e força a atualização do datatable
public String salvar() {
PacienteRN pacienteRN = new PacienteRN();
pacienteRN.salvar(this.selecionado);
this.lista = null;
return this.destinoSalvar;
}
Boa tarde rodolfoghi;
isso, já está sendo feito. No bean a lista é atualizada normalmente.
No dataTable também, porém ela só mostra a lista atualizada quando eu insiro algum dado no filtro.
Quando faço isso, o dataTable é recarregado normalmente.
Eu queria que ele o dataTable fizesse isso sem eu ter que digitar alguma coisa no filtro!
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h2>Regiões Administrativas</h2>
<p:dataTable id="ra-dataTable" var="ra" value="#{rABean.ras}"
emptyMessage="Nenhum resultado encontrado."
rowKey="#{ra.numeroRomano}" selection="#{rABean.raSelecionada}"
selectionMode="single" paginator="true" rows="10"
filteredValue="#{rABean.rasFiltradas}" widgetVar="rasTable"
resizableColumns="true"
rowStyleClass="#{ra.auditoria.dataInativacao eq null ? 'even-row' : 'odd-row'}"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
currentPageReportTemplate="Total de {totalRecords} registros - Página: {currentPage} de {totalPages} ">
<f:facet name="header">
<p:inputText id="globalFilter" onkeyup="rasTable.filter()"
styleClass="float-right" immediate="true">
<p:watermark for="globalFilter" value="Pesquisar" />
</p:inputText>
<br />
</f:facet>
<!--<f:facet name="header">Regiões Administrativas</f:facet> -->
<p:column filterBy="#{ra.numeroRomano}" filterMatchMode="startsWith"
headerText="Número Romano">
<h:outputText value="#{ra.numeroRomano}" />
</p:column>
<p:column filterBy="#{ra.nome}" filterMatchMode="startsWith"
sortBy="#{ra.nome}" headerText="Nome">
<h:outputText value="#{ra.nome}" />
</p:column>
<p:column headerText="Status" filterBy="#{ra.auditoria.statusForView}"
filterOptions="#{rABean.statusOptions}">
<h:outputText value="#{ra.auditoria.statusForView}" />
</p:column>
<p:column headerText="Ação" width="30">
<p:commandButton id="selectButton" icon="ui-icon-search"
title="Visualizar e Modificar" action="#{rABean.selecionarRa()}">
<f:setPropertyActionListener value="#{ra.id}"
target="#{rABean.raAlteracao.id}" />
</p:commandButton>
</p:column>
</p:dataTable>
<br />
</ui:composition>
Bom dia!
Posta o código do teu rABean, por favor.
Olá Edison Martins,
estou com esse mesmo problema. Vc conseguiu resolvê-lo?
No meu caso, só é realizado o update no banco quando dou F5 na minha página, e só assim os dados aparecem atualizados.
Eu consegui resolver mas não sei se foi gambiarra…Só sei que agora funciona .
Só para não deixar sem explicação vou dizer como eu fiz.
Antes, meu bean tinha:
public String activateIndividualPaper() {
IndividualRN individualRN = new IndividualRN();
this.selecIndividualPaper = individualRN
.loadIndividualPaper(this.selecIndividualPaper.getId());
individualRN.restore(this.selecIndividualPaper.getPaper().getId());
this.selecIndividualPaper.setAtivo(true);
individualRN.save(this.selecIndividualPaper);
this.selecIndividualPaper = new IndividualPaper();
return "listuniqueIndPaperx";
}
E meu DAOHibernate tinha:
[code]public void save(IndividualPaper individualPaper) {
this.session.save(individualPaper);
}
public void restore(Integer id) {
String hql = “UPDATE IndividualPaper SET ativo=:newativo WHERE ativo=:oldativo and paper.id=:id”;
Query updatedEntities = this.session.createQuery(hql);
updatedEntities.setBoolean(“newativo”,false);
updatedEntities.setBoolean( “oldativo”,true);
updatedEntities.setInteger(“id”, id);
updatedEntities.executeUpdate();
}
[/code]
Agora eu fiz assim:
Meu bean:
public String activateIndividualPaper() {
IndividualRN individualRN = new IndividualRN();
this.selecIndividualPaper = individualRN
.loadIndividualPaper(this.selecIndividualPaper.getId());
individualRN.restore(this.selecIndividualPaper.getPaper().getId());
individualRN.activateIndPaper(this.selecIndividualPaper.getId());
this.selecIndividualPaper = new IndividualPaper();
return "listuniqueIndPaperx";
}
Como se vê, eu não chamo o método save mais. Faço a atualização através do método activateIndPaper.
Agora no DAOHibernate tenho:
[code]public void activateIndPaper(Integer id) {
String hql = “UPDATE IndividualPaper i SET ativo=:newativo WHERE i.id=:id”;
Query updatedEntities = this.session.createQuery(hql);
updatedEntities.setBoolean(“newativo”,true);
updatedEntities.setInteger(“id”, id);
updatedEntities.executeUpdate();
}[/code]
Assim, quando eu peço para listar os dados na datatable, eles aparecem já atualizados.
Se depois alguém souber qual o jeito correto de resolver ou apontar o erro que eu estava cometendo, ficaria grata. =)
Olá, acredito que o seu caso seja um pouco diferente do meu. Eu modifico o MB do “filteredValue” para Null sempre que saio da tela, então quando volto, o p:dataTable recarrega os dados atualizados. No seu caso fica complicado compreender, pois você não postou o xhtml. Mas que bom que funcionou!!!