[RESOLVIDO] Atualizar p:dataTable de outra tela!

6 respostas
Edison_Martins

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!

6 Respostas

R

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;
	}
Edison_Martins

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

Bom dia!
Posta o código do teu rABean, por favor.

LinOleron

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.

LinOleron

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:
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();
		
	}

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:
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();
		
	}

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. =)

Edison_Martins

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

Criado 19 de maio de 2013
Ultima resposta 9 de jul. de 2013
Respostas 6
Participantes 3