[RESOLVIDO] Atualizar p:dataTable de outra tela!

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!!!