Data Table não atualiza após remoção de registro

9 respostas
K

Estou usando Prime Faces 2, componente DataTable. Quando removo um registro da lista a tabela não é atualizada na tela.
Alguém poderia me dar uma dica se estou fazendo algo errado?.. Obrigado pela atenção…

<h:form prependId="false">
					
								<p:fieldset legend="Tabela Fluxo">
								
										<p:dataTable id="tbFluxo"
													 value="#{SolicitacaoBean.listaFluxos}" 
										             var="u"
													 emptyMessage="Nenhum registro encontrado." 
											         scrollable="true"
											         height="200" 
											         width="195"  >
	
															<p:column id="col01" headerText="Passo" style="width:100px">
																<h:outputText value="#{u.nrSeq}" style="width:100px" />
															</p:column>
					
															<p:column id="col02" headerText="Id Origem" style="width:100px">
																<h:outputText value="#{u.relacionamentoEoSol.id.idUnidade}" style="width:100px" />
															</p:column>
															
															<p:column id="col03" headerText="Id Destino" style="width:100px">
																<h:outputText value="#{u.idUnidadeDestino}" style="width:100px" />
															</p:column>
															
															<p:column id="col09" headerText="Delete" style="width:50px">
																	<p:commandButton id="btExcluir" 
																	    			 update="tbFluxo"
																	                 image="ui-icon-close"
																					 actionListener="#{SolicitacaoBean.doRemovePasso}">
																	
																	<f:param id="columnToRemove" name="columnToRemove" value="#{u}" />  
																					 
																	</p:commandButton>
															</p:column>
														
										</p:dataTable>
								</p:fieldset>
						
					</h:form>

9 Respostas

WRYEL

provavelmente o update=“tbFluxo” do seu commandButton ta apontando para o lugar errado. Já tentou ver o codigo fonte gerado pelo navegador e pegar o id?

geralmente quando o prepend id não tá setado como false, ficaria algo como:

form:fieldset:tbFluxo

K

Sim, não sei pq ele escreve tbFluxo:1 … por que esse :1 ? isso acontece só na opção de excluir… na mesma tela tenho outro form onde monto um passo do fluxo e depois adiciono nesse form q postei, onde estah a tabela… no form que uso para add o passo de fluxo o update dá certinho… muito estranho isso…

K

Código da tela toda:

<html 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.prime.com.tr/ui"
	xmlns:mj="http://mojarra.dev.java.net/mojarra_ext"
	xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:head />
<h:body>
	<div id="formCadastro">
		<h:form id="formCadSolicitacaoVoltar" prependId="false">
			<h:commandLink value="Voltar" action="#{SolicitacaoBean.doVoltar}"
				id="cmdVoltar" />
		</h:form>

		<h:form id="formCadastroSolicitacao" prependId="false">

			<p:fieldset legend="Cadastro de Solicitação">
			
				<h:panelGrid columns="2" id="pnlSolicitacao" >
				
					<h:outputLabel id="lblNome" for="txtNome" value="Nome da Solicitação:*" />
					<h:inputText id="txtNome" value="#{SolicitacaoBean.solicitacao.nmSolicitacao}" maxlength="29" />
					
					<h:outputLabel id="lblDescricao" for="txtDescricao" value="Descrição da Solicitação:" />
					<h:inputTextarea id="txtDescricao" value="#{SolicitacaoBean.solicitacao.dsSolicitacao}" maxlength="49" />
					
					<h:outputLabel/>
					<p:commandButton id="btAdicionarPasso"
												 update="tbFluxo lblSeq cmbUnidade" 
												 type="submit"
									             value="Adicionar Passo"
									             action="#{SolicitacaoBean.addPassoFluxo}"
									             />
						
			    </h:panelGrid>
				
			</p:fieldset>

		</h:form>
		   
	    <h:panelGrid id="pnlFluxo" columns="2">
	             
					 <h:form id="formCadPassoFluxo" prependId="false">
						<p:fieldset legend="Passos do Fluxo">
								<c:choose>
									<c:when test="${(SolicitacaoBean.fluxo.nrSeq ge 0) and (SolicitacaoBean.fluxo.nrSeq lt 99)}">
										<h:panelGrid id="pnlPassos" columns="2">
										<h:outputLabel id="lblSeq" value="Passo ${SolicitacaoBean.fluxo.nrSeq} :" />
										<h:outputLabel />
										
										<h:outputLabel id="lblUnidadeOrigem" value="Origem:" for="cmbUnidade" />
	
										<h:selectOneMenu id="cmbUnidade"
											value="#{SolicitacaoBean.fluxo.id.idUnidade}">
											<f:selectItem itemValue="0" itemLabel="Todos" />
											<f:selectItems id="selUnidades"
												value="#{SolicitacaoBean.listaSetores}" var="obj"
												itemLabel="#{obj.nmSglUnidade}" itemValue="#{obj.idUnidade}" />
									    </h:selectOneMenu>
								
										<h:outputLabel id="lblUnidadeDestino" value="Destino:" for="cmbUnidade2" />
										<h:selectOneMenu id="cmbUnidade2"
											value="#{SolicitacaoBean.fluxo.idUnidadeDestino}">
											<f:selectItem itemValue="0" itemLabel="Todos" />
											<f:selectItems id="selUnidades2"
												value="#{SolicitacaoBean.listaSetores}" var="l"
												itemLabel="#{l.nmSglUnidade}" itemValue="#{l.idUnidade}" />
										</h:selectOneMenu>

									</h:panelGrid>
									
									</c:when>
								
								</c:choose>
									
								<p:commandButton id="btAdicionarPasso"
												 update="tbFluxo lblSeq cmbUnidade" 
												 type="submit"
									             value="Adicionar Passo"
									             actionListener="#{SolicitacaoBean.addPassoFluxo}"
									             ajax="true" />

						</p:fieldset>
						</h:form>
						<h:form prependId="false">
					
								<p:fieldset legend="Tabela Fluxo">
								
										<p:dataTable id="tbFluxo"
													 value="#{SolicitacaoBean.listaFluxos}" 
										             var="u"
													 emptyMessage="Nenhum registro encontrado." 
											         scrollable="true"
											         height="200" 
											         width="195"  >
	
															<p:column id="col01" headerText="Passo" style="width:100px">
																<h:outputText value="#{u.nrSeq}" style="width:100px" />
															</p:column>
					
															<p:column id="col02" headerText="Id Origem" style="width:100px">
																<h:outputText value="#{u.relacionamentoEoSol.id.idUnidade}" style="width:100px" />
															</p:column>
															
															<p:column id="col03" headerText="Id Destino" style="width:100px">
																<h:outputText value="#{u.idUnidadeDestino}" style="width:100px" />
															</p:column>
															
															<p:column id="col09" headerText="Delete" style="width:50px">
																	<p:commandButton id="btExcluir" 
																	    			 update="tbFluxo"
																	                 image="ui-icon-close"
																					 actionListener="#{SolicitacaoBean.doRemovePasso}">
																	
																	<f:param id="columnToRemove" name="columnToRemove" value="#{u}" />  
																					 
																	</p:commandButton>
															</p:column>
														
										</p:dataTable>
								</p:fieldset>
						
					</h:form>

		</h:panelGrid>

	</div>

</h:body>
</html>
P

Depois de chamar o metodo de excluir do manageben tem que fazer a consulta novamente logo em seguida do metodo remover, porque se não o JSF vai manter o estado da pagina.

K

Nesse momento nem fui na base de dados ainda, no método do managedBean eu removo o registro da variável do tipo ArrayList, e isso funciona perfeitamente. Tanto é q se eu der o comando, CTRL+F5 a tabela na tela é atualizada…

K

Na verdade só falta o refresh da tela… não quero usar POG(programação orientada a gambiarra), senão eu forçava um refresh na tela de outra forma… hehe

P

Atualize esses dois ids também e vê se funciona.:
pnlFluxo, formCadPassoFluxo.

K

Pat funcionou perfeitamente, muito obrigado pela ajuda…

P

Ok. até mais.

Criado 18 de agosto de 2011
Ultima resposta 19 de ago. de 2011
Respostas 9
Participantes 3