Problemas com Basic Row Selection e Filter do Primefaces

26 respostas
L

Galera, boa tarde…
Estou com seguinte problema e queria a ajuda de vcs!

Tenho uma tabela que está “decorada” com o primefaces e utilizando o filtro dele tbm…funciona normalmente, qualquer dos parâmetros que coloco lá ele busca na boa, e quando vou pela paginação, tudo rola normal…

O problema é quando eu procuro um registro, acho o mesmo, e clico no botão para edição do campo…deixa eu explicar o que rola aqui:

…um formulário que contém dados para inserir, atualizar e excluir na mesma página…

…ele me retorna o registro de edição da primeira página!

Mais ou menos assim: edita normal só se eu não procurar por um registro…se eu paginar pelos botões funciona, mas procurou por um registro qualquer, quando clico no botão editar, me retorna o registro da primeira página, mesmo não sendo ele!!!

Alguém poderia me ajudar?!?!

26 Respostas

L

Coloca o modo como está a parte da sua datatable por favor

L

opa....obrigado pela resposta rápida!!

segue meu xhtml com o form todo...

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<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:sec="http://www.springframework.org/security/facelets/tags"
	  xmlns:ui="http://java.sun.com/jsf/facelets"
	  xmlns:p="http://primefaces.org/ui">
	  
	<ui:composition template="/templates/interna.xhtml">
		<ui:define name="titulo">
			Sistema de Cadastramento de Contratos de Reparos - SisReparo - Cadastrar Contratos
		</ui:define>
		
		<ui:define name="centro">
			<div class="titulo_pagina">
				<h1>CADASTRO DE CONTRATOS</h1>
			</div>
		
			<div class = "titulo_interno">
				<h4>Campos de preenchimento <font color='#FF0000'>obrigat&oacute;rio!</font></h4>
			</div>
			
		<p:fieldset>
			<div class="alinhaFormularios">
				<h:form id="edicao" prependId = "false">
			<!-- 	
			<div class = "msgErroValidacao">
				<h:messages/>	
			</div>
			 -->
					<h:inputHidden value="#{contratoBean.contrato.dgco}"/>
					<h:inputHidden value="#{contratoBean.destinoSalvar}"/>
			
				   <h:panelGrid columns="4">
							<h:panelGrid columns="2">

								<h:outputLabel value="DGCO: " for="dgco" style="color:red"/>
								<p:inputMask id="dgco" value="#{contratoBean.contrato.dgco}" required="true" size="29" maxlength="9"
											 mask = "99999/9999"
											 requiredMessage = " - Erro de validação no campo DGCO: o valor é necessário."
											 validatorMessage = " - Erro de inserção no campo DGCO: o campo DGCO só aceita valores numéricos e uma barra no formato (99999/9999).">
									<f:validateRegex pattern="(^[0-9]{5}+[/]{1}+[0-9]{4})"/>
								</p:inputMask>

								<h:outputLabel value="OC: " for="oc" style="color:red"/>
								<p:inputText id="oc" value="#{contratoBean.contrato.oc}" required="true" size="29" maxlength="06"
											 requiredMessage = " - Erro de validação no campo OS: o valor é necessário."
											 validatorMessage = " - Erro de inserção no campo OC: o valor é menor do que o mínimo permitido de 6">
									<f:validateRegex pattern="(^[0-9]{6})"/>
								</p:inputText>
								
								<h:outputLabel value="CNPJ: " for="cnpj" style="color:red"/>
								<p:inputMask id="cnpj" value="#{contratoBean.contrato.cnpj}" required="true" size="29" maxlength="14"
											 requiredMessage = " - Erro de validação no campo CNPJ: o valor é necessário."/>								
								 			 
								<h:outputLabel value="Ativo: " for="ativo" style="color:red"/>
								<p:selectOneMenu value = "#{contratoBean.contrato.ativo}" id="ativo" required="true" 
												 requiredMessage = " - Erro de validação no campo ATIVO: o valor é necessário.">
									<f:selectItem itemLabel = "&nbsp;&nbsp;&nbsp;&nbsp;Selecione uma das op&ccedil;&otilde;es&nbsp;&nbsp;&nbsp;"/>
									<f:selectItem itemLabel = "B = Bloqueado" itemValue = "B"/>
									<f:selectItem itemLabel = "D = Distrato" itemValue = "D"/>
									<f:selectItem itemLabel = "N = Inativo" itemValue = "N"/>
									<f:selectItem itemLabel = "S = Ativo" itemValue = "S"/>
									<f:selectItem itemLabel = "V = Contrato Vencido" itemValue = "V"/>								
								</p:selectOneMenu>										 
							
								<h:outputLabel value="Contrato Cobra: " for="contratoCobra"/>
								<p:inputMask id="contratoCobra" value="#{contratoBean.contrato.contratoCobra}" size="29" maxlength="10" mask = "99999/9999"/>
								
								<h:outputLabel value="Fornecedor: " for="fornecedor"/>
								<p:inputText id="fornecedor" value="#{contratoBean.contrato.fornecedor}" size="29" maxlength="100"/>

								<h:outputLabel value="Pregão: " for="pregao"/>
								<p:inputText id="pregao" value="#{contratoBean.contrato.pregao}" size="29" maxlength="14"/>

								<h:outputLabel value="Solicitação: " for="solicitacao"/>
								<p:inputText id="solicitacao" value="#{contratoBean.contrato.solicitacao}" size="29" maxlength="100"/>
	
								<h:outputLabel value="Descrição: " for="descricao"/>
								<p:inputTextarea id="descricao" value="#{contratoBean.contrato.descricao}" cols = "34"/>
	
								<h:outputLabel value="Data da Assinatura: " for="dataAssinatura"/>
								<p:calendar id="dataAssinatura" value="#{contratoBean.contrato.dataAssinatura}" size="12"
											 maxlength="10" effect = "slide" navigator = "true" showOn = "button">
									<f:convertDateTime dateStyle="medium"/>		 
								</p:calendar>
								
								<h:outputLabel value="Data do Vencimento: " for="dataVencimento"/>
								<p:calendar id="dataVencimento" value="#{contratoBean.contrato.dataVencimento}" size="12"
											 maxlength="10" effect = "slide" navigator = "true" showOn = "button">
									<f:convertDateTime dateStyle="medium"/>										 
								</p:calendar>
								 
								<h:outputLabel value="Data do Distrato: " for="dataDistrato"/>
								<p:calendar id="dataDistrato" value="#{contratoBean.contrato.dataDistrato}" size="12"
											 maxlength="10" effect = "slide" navigator = "true" showOn = "button">
									<f:convertDateTime dateStyle="medium"/>										 
								</p:calendar>

							</h:panelGrid>
						
						&nbsp;&nbsp;&nbsp;
						&nbsp;&nbsp;&nbsp;
						&nbsp;&nbsp;&nbsp;
						&nbsp;&nbsp;&nbsp;
						
							<h:panelGrid columns="2">

								<h:outputLabel value="Valor Global: " for="valorGlobal"/>
								<p:inputText id="valorGlobal" value="#{contratoBean.contrato.valorGlobal}" size="29" maxlength="10">
									<f:convertNumber minFractionDigits="2"/>
								</p:inputText>
	
								<h:outputLabel value="Valor de Consumo: " for="valorConsumo"/>
								<p:inputText id="valorConsumo" value="#{contratoBean.contrato.valorConsumo}" size="29" maxlength="10">
									<f:convertNumber minFractionDigits="2"/>							
								</p:inputText>
	
								<h:outputLabel value="Saldo: " for="saldo"/>
								<p:inputText id="saldo" value="#{contratoBean.contrato.saldo}" size="29" maxlength="10">
									<f:convertNumber minFractionDigits="2"/>							
								</p:inputText>
	
								<h:outputLabel value="Dias de Atraso: " for="diasAtraso"/>
								<p:inputText id="diasAtraso" value="#{contratoBean.contrato.diasAtraso}" size="29" maxlength="02"/>
	
								<h:outputLabel value="Percentual por Atraso: " for="percentualAtraso"/>
								<p:inputText id="percentualAtraso" value="#{contratoBean.contrato.percentualAtraso}" size="29" maxlength="10">
									<f:convertNumber minFractionDigits="2"/>							
								</p:inputText>
	
								<h:outputLabel value="Multa por Atraso: " for="multaAtraso"/>
								<p:inputText id="multaAtraso" value="#{contratoBean.contrato.multaAtraso}" size="29" maxlength="10">
									<f:convertNumber minFractionDigits="2"/>							
								</p:inputText>
	
								<h:outputLabel value="Percentual por Devolução: " for="percentualDevolucao"/>
								<p:inputText id="percentualDevolucao" value="#{contratoBean.contrato.percentualDevolucao}" size="29" maxlength="04">
									<f:convertNumber minFractionDigits="2"/>							
								</p:inputText>		
	
								<h:outputLabel value="Multa por Devolução: " for="multaDevolucao"/>
								<p:inputText id="multaDevolucao" value="#{contratoBean.contrato.multaDevolucao}" size="29" maxlength="10">
									<f:convertNumber minFractionDigits="2"/>							
								</p:inputText>
								
								<h:outputLabel value="Região: " for="regiao"/>
								<p:selectOneMenu value = "#{contratoBean.contrato.regiao}" id="regiao">
									<f:selectItem itemLabel = "&nbsp;&nbsp;&nbsp;&nbsp;Selecione uma das op&ccedil;&otilde;es&nbsp;&nbsp;&nbsp;"/>
									<f:selectItem itemLabel = " 0 = Todos os CAT's" itemValue = "0"/>
									<f:selectItem itemLabel = " 1 = CAT's da 1ª Região" itemValue = "1"/>
									<f:selectItem itemLabel = " 2 = CAT's da 2ª Região" itemValue = "2"/>
								</p:selectOneMenu>
	
								<h:outputLabel value="CAT de forma livre: " for="cat"/>
								<p:inputTextarea id="cat" value="#{contratoBean.contrato.cat}" cols = "34"/>
	
								<h:outputLabel value="Observação: " for="observacao"/>
								<p:inputTextarea id="observacao" value="#{contratoBean.contrato.observacao}" cols = "34"/>
	
							</h:panelGrid>
				  </h:panelGrid>		
				  <br/>
				  <h:panelGrid columns="2">
							<h:commandLink action="#{contratoBean.salvar}" update = "aviso">
								<f:ajax execute="@form" render = ":edicao :listagem"/>
								<h:graphicImage library="imagens" name="btn_salvar.png" style="border:0"/>
								<p:growl id = "aviso" showDetail= "false" sticky="true"/>
							</h:commandLink>
				  <br/>
				  </h:panelGrid>
				</h:form>
			</div>		
			</p:fieldset>

			<div class = "titulo_interno">
				<h4>Importar Ítens do Contrato</h4>
			</div>
			
		        <h:form enctype="multipart/form-data">
		        <p:fieldset>
		        	<p:messages showDetail = "true"/>
							<h3>Utilize este formul&aacute;rio para fazer o upload do arquivo com
							os &iacute;tens do contrato que você acabou de cadastrar.</h3><br/>
			
		            <p:fileUpload fileUploadListener="#{fileUploadController.handleFileUpload}" 
		            			  styleClass = "cor_primefaces"
		                          mode="advanced"
		                          update="messages"
		                          label="Selecione um arquivo"
		                          sizeLimit="1048576"
		                          allowTypes="/(\.|\/)(csv|txt|xls|xlsx)$/"
		                          invalidSizeMessage="O tamanho máximo permitido para cada arquivo é de 1 Megabyte!"
		                          invalidFileMessage="Somente arquivos do tipo *.csv, *.txt, *.xls e *.xlsx são permitidos !"
		                          />
		                      
		            <p:growl id="messages" showDetail="true" sticky="true"/>
		        </p:fieldset>    
		        </h:form>

			<br/>

			<div class = "titulo_interno">
				<h4>Gravar Ítens do Contrato</h4>
			</div>

		        <h:form>
			        <p:fieldset>
			        	<p:messages showDetail = "true"/>
								<h3>Utilize este bot&atilde;o para executar o comando de importa&ccedil;&atilde;o
								dos &iacute;tens do contrato que você acabou de cadastrar.<br/><br/>
								<font color='#FF0000'>OBS:</font> Execute este comando somente no final do dia,
								quando a coleta de todos os &iacute;tens dos contratos cadastrados<br/> estiver terminada!</h3><br/>
			        
			        	<p:commandButton action = "#{contratoBean.executa}" icon = "ui-icon-disk" value = "Gravar"/>
			        </p:fieldset>
		        </h:form>
        	
			<br/>	
			
			<div class = "titulo_interno">
				<h4>Listagem de Contratos Cadastrados</h4>
			</div>

			<div class = "formCadastro">
				<h:form id="listagem">
				<p:dataTable value="#{contratoBean.lista}" var="id" rendered="#{!empty contratoBean.lista}" rules="rows" cellpadding="5"
							 paginator="true" rows="10" rowsPerPageTemplate="10,15,20" emptyMessage = "Nenhum contrato encontrado com o parâmetro especificado.">
						<p:column sortBy = "#{id.dgco}" filterBy = "#{id.dgco}">
							<f:facet name="header">DGCO</f:facet>
							#{id.dgco}
						</p:column>
						
						<p:column sortBy = "#{id.oc}" filterBy = "#{id.oc}">
							<f:facet name="header">OC</f:facet>
							#{id.oc}
						</p:column>

						<p:column sortBy = "#{id.cnpj}" filterBy = "#{id.cnpj}">
							<f:facet name="header">CNPJ</f:facet>
							#{id.cnpj}
						</p:column>

						<p:column sortBy = "#{id.fornecedor}" filterBy = "#{id.fornecedor}">
							<f:facet name="header">Fornecedor</f:facet>
							#{id.fornecedor}
						</p:column>

						<p:column>
							<f:facet name="header">Data Assinatura</f:facet>
							<h:outputText value="#{id.dataAssinatura}">
								<f:convertDateTime dateStyle="medium"/>
							</h:outputText>
						</p:column>
						
						<p:column>
							<f:facet name="header">Data Vencimento</f:facet>
							<h:outputText value="#{id.dataVencimento}">
								<f:convertDateTime dateStyle="medium"/>
							</h:outputText>
						</p:column>
						
						<p:column>
							<f:facet name="header">Ativo</f:facet>
							#{id.ativo}
						</p:column>
						
						<p:column>
							<f:facet name="header">Editar</f:facet>	
							<h:commandLink title="Editar">
								<f:ajax execute="@this" render=":edicao"/>
								<h:graphicImage library="imagens" name="edit.png" style="border:0"/>
								<f:setPropertyActionListener target="#{contratoBean.contrato}" value="#{id}"/>
							</h:commandLink>
						</p:column>
						
						<p:column>
							<f:facet name="header">Excluir</f:facet>						
							<h:commandLink action="#{contratoBean.excluir}" title="Excluir" onclick = "if(!confirm('Tem certeza que deseja excluir esse contrato?')) return false">
								<f:ajax execute="@this" render=":listagem"/>
								<h:graphicImage library="imagens" name="edittrash.png" style="border:0"/>
								<f:setPropertyActionListener target="#{contratoBean.contrato}" value="#{id}"/>
							</h:commandLink>
						</p:column>
					</p:dataTable>
				</h:form>				 
			</div>
		<br/>
		</ui:define>
	</ui:composition>
</html>

como disse lá no post...quando procuro por um registro na datatable pra editá-lo, me retorna o campo da primeira página. Isso só não acontece quando eu não faço filtro, entende?...se eu paginar e marcar pra editar qualquer campo, o form recupera as informações na boa...

obrigado pela ajuda!

E

Mesmo problema aqui :frowning:

Estou com problema no filter e no sort também.

S

Amigo, percebi que vc ta usando f:ajax, tente usar p:ajax, pois o mesmo está integrado nos Render nativo do core do primefaces, outrosim, tome cuidado, eu tive esse problemas, se você estiver trabalhando na mesma página com bastante ajax, tente limpar a árvore de componentes, pode ser por isso que ele não ta te dando valor setado, isso se você está fazendo request ajax para o servidor, se o problema está no Client Side, tente usar os métodos javascript no Primefaces Jquery. tipo

widgetVarDataTable.getPaginator().setPage(MINHA_PAGINA_INDEX);

widgetVarDataTable.clearFilters();

L

Opa, bom dia. Primeiramente obrigado pela resposta…

Tentei usar o <p:ajax> como vc disse mas não funcionou! Na verdade, o link parou de funcionar com essa tag…

Estou seguindo um livro que faz exatamente assim…só uso ajax nesse ponto da página!

em relação à usar o jquery nesse meu problema, teria um exemplo pra me dar?

esse widgetVarDataTable.getPaginator().setPage(MINHA_PAGINA_INDEX); eu colocaria aonde no meu contexto?

Obrigado e bom dia, mais uma vez!!!

E

sfidencio:
Amigo, percebi que vc ta usando f:ajax, tente usar p:ajax, pois o mesmo está integrado nos Render nativo do core do primefaces, outrosim, tome cuidado, eu tive esse problemas, se você estiver trabalhando na mesma página com bastante ajax, tente limpar a árvore de componentes, pode ser por isso que ele não ta te dando valor setado, isso se você está fazendo request ajax para o servidor, se o problema está no Client Side, tente usar os métodos javascript no Primefaces Jquery. tipo

widgetVarDataTable.getPaginator().setPage(MINHA_PAGINA_INDEX);

widgetVarDataTable.clearFilters();


Opa! Valeu pela resposta e acho que vai dar certinho pra mim. Eu estava atrás de um código que limpasse a árvore, porém não sei o que é o MINHA_PAGINA_INDEX que você mencionou.

Mais uma vez obrigado!

L

esdras_63:
sfidencio:
Amigo, percebi que vc ta usando f:ajax, tente usar p:ajax, pois o mesmo está integrado nos Render nativo do core do primefaces, outrosim, tome cuidado, eu tive esse problemas, se você estiver trabalhando na mesma página com bastante ajax, tente limpar a árvore de componentes, pode ser por isso que ele não ta te dando valor setado, isso se você está fazendo request ajax para o servidor, se o problema está no Client Side, tente usar os métodos javascript no Primefaces Jquery. tipo

widgetVarDataTable.getPaginator().setPage(MINHA_PAGINA_INDEX);

widgetVarDataTable.clearFilters();


Opa! Valeu pela resposta e acho que vai dar certinho pra mim. Eu estava atrás de um código que limpasse a árvore, porém não sei o que é o MINHA_PAGINA_INDEX que você mencionou.

Mais uma vez obrigado!

Opa esdras, blz?!?!

Poderia me dizer como está sua aplicação? Está parecida com a minha? Como fez pra resolver? No meu caso não funcionou a dica do colega!!!

Estou pesquisando ainda aqui e na net, mas até agora nada!!!

A luta continua!!

S

leonardoteles:
Opa, bom dia. Primeiramente obrigado pela resposta…

Tentei usar o <p:ajax> como vc disse mas não funcionou! Na verdade, o link parou de funcionar com essa tag…

Estou seguindo um livro que faz exatamente assim…só uso ajax nesse ponto da página!

em relação à usar o jquery nesse meu problema, teria um exemplo pra me dar?

esse widgetVarDataTable.getPaginator().setPage(MINHA_PAGINA_INDEX); eu colocaria aonde no meu contexto?

Obrigado e bom dia, mais uma vez!!!

Então eu usei isso, por exemplo, quando eu adicionava um novo registro na p:dialog, as vezes nao funcionada dar um reRender/update na DataTable, ai eu via JS, delegava para para minha datTable ir para primeira pagina sempre. Mas pelo que entendi, seu problema e no filtro paginado…, humm

<h:form id="listagem">  
                <p:dataTable value="#{contratoBean.lista}" var="id" rendered="#{!empty contratoBean.lista}" rules="rows" cellpadding="5"  
                             paginator="true" rows="10" rowsPerPageTemplate="10,15,20" emptyMessage = "Nenhum contrato encontrado com o parâmetro especificado.">

Amigo, me explica, como vc ta setando o item selecionado no bean para edição?

S

leonardoteles:
Opa, bom dia. Primeiramente obrigado pela resposta…

Tentei usar o <p:ajax> como vc disse mas não funcionou! Na verdade, o link parou de funcionar com essa tag…

Estou seguindo um livro que faz exatamente assim…só uso ajax nesse ponto da página!

em relação à usar o jquery nesse meu problema, teria um exemplo pra me dar?

esse widgetVarDataTable.getPaginator().setPage(MINHA_PAGINA_INDEX); eu colocaria aonde no meu contexto?

Obrigado e bom dia, mais uma vez!!!

Então eu usei isso, por exemplo, quando eu adicionava um novo registro na p:dialog, as vezes nao funcionada dar um reRender/update na DataTable, ai eu via JS, delegava para para minha datTable ir para primeira pagina sempre. Mas pelo que entendi, seu problema e no filtro paginado…, humm

<h:form id="listagem">  
                <p:dataTable value="#{contratoBean.lista}" var="id" rendered="#{!empty contratoBean.lista}" rules="rows" cellpadding="5"  
                             paginator="true" rows="10" rowsPerPageTemplate="10,15,20" emptyMessage = "Nenhum contrato encontrado com o parâmetro especificado.">

Amigo, me explica, como vc ta setando o item selecionado no bean para edição?

S

Desculpe pela dupla postagem, deu uma Exception no JForum, quando fui salvar, dizendo MysqlJDBC4ConnectionTransientExeception…

E

leonardoteles:
esdras_63:
sfidencio:
Amigo, percebi que vc ta usando f:ajax, tente usar p:ajax, pois o mesmo está integrado nos Render nativo do core do primefaces, outrosim, tome cuidado, eu tive esse problemas, se você estiver trabalhando na mesma página com bastante ajax, tente limpar a árvore de componentes, pode ser por isso que ele não ta te dando valor setado, isso se você está fazendo request ajax para o servidor, se o problema está no Client Side, tente usar os métodos javascript no Primefaces Jquery. tipo

widgetVarDataTable.getPaginator().setPage(MINHA_PAGINA_INDEX);

widgetVarDataTable.clearFilters();


Opa! Valeu pela resposta e acho que vai dar certinho pra mim. Eu estava atrás de um código que limpasse a árvore, porém não sei o que é o MINHA_PAGINA_INDEX que você mencionou.

Mais uma vez obrigado!

Opa esdras, blz?!?!

Poderia me dizer como está sua aplicação? Está parecida com a minha? Como fez pra resolver? No meu caso não funcionou a dica do colega!!!

Estou pesquisando ainda aqui e na net, mas até agora nada!!!

A luta continua!!

Ainda não resolvi não! Vou tentar a dica do colega. Está quase igual a sua e meu problema está no filtro, sort e paginator creio eu pois testei com poucos registros ainda. O nosso problema eu tenho quase certeza que seja uma espécie de cache nativo do Primefaces, e estou tentando achar algum código que limpe ele para construir os botões novamente a cada ajax recebido.

Vou tentar com esse código do nosso colega e volto a postar.

E

Isso não me traz boas lembranças… Heheheh

S

esdras_63:
sfidencio:
Amigo, percebi que vc ta usando f:ajax, tente usar p:ajax, pois o mesmo está integrado nos Render nativo do core do primefaces, outrosim, tome cuidado, eu tive esse problemas, se você estiver trabalhando na mesma página com bastante ajax, tente limpar a árvore de componentes, pode ser por isso que ele não ta te dando valor setado, isso se você está fazendo request ajax para o servidor, se o problema está no Client Side, tente usar os métodos javascript no Primefaces Jquery. tipo

widgetVarDataTable.getPaginator().setPage(MINHA_PAGINA_INDEX);

widgetVarDataTable.clearFilters();


Opa! Valeu pela resposta e acho que vai dar certinho pra mim. Eu estava atrás de um código que limpasse a árvore, porém não sei o que é o MINHA_PAGINA_INDEX que você mencionou.

Mais uma vez obrigado!

Perai, vamos separar o joio do trigo… :smiley:

esse código ai é javascript, esse MINHA_PAGINA_INDex, é o numero da pagina do p:datTable no cliente, certo?, agora quanto limpar a arvore de compontes, é um método que fica do lado do servidor, que responsavel por setar null, nas propriedades da request dentro do JSF LifeCycle.

O Rafael Pontes aborda isso com franqueza. segue:

http://www.rponte.com.br/2011/06/07/limpando-a-arvore-de-componentes/

E

sfidencio:
esdras_63:
sfidencio:
Amigo, percebi que vc ta usando f:ajax, tente usar p:ajax, pois o mesmo está integrado nos Render nativo do core do primefaces, outrosim, tome cuidado, eu tive esse problemas, se você estiver trabalhando na mesma página com bastante ajax, tente limpar a árvore de componentes, pode ser por isso que ele não ta te dando valor setado, isso se você está fazendo request ajax para o servidor, se o problema está no Client Side, tente usar os métodos javascript no Primefaces Jquery. tipo

widgetVarDataTable.getPaginator().setPage(MINHA_PAGINA_INDEX);

widgetVarDataTable.clearFilters();


Opa! Valeu pela resposta e acho que vai dar certinho pra mim. Eu estava atrás de um código que limpasse a árvore, porém não sei o que é o MINHA_PAGINA_INDEX que você mencionou.

Mais uma vez obrigado!

Perai, vamos separar o joio do trigo… :smiley:

esse código ai é javascript, esse MINHA_PAGINA_INDex, é o numero da pagina do p:datTable no cliente, certo?, agora quanto limpar a arvore de compontes, é um método que fica do lado do servidor, que responsavel por setar null, nas propriedades da request dentro do JSF LifeCycle.

O Rafael Pontes aborda isso com franqueza. segue:

http://www.rponte.com.br/2011/06/07/limpando-a-arvore-de-componentes/


Opa! Na verdade não creio que seja esse meu problema, pois não é somente com o botão alterar, e sim com os bloquear dentre outros. Quanto a parte de limpar os inputs como descrito no blog, eu faço normalmente.

O que está acontecendo comigo é que aparentemente, quando mando via ajax recarregar a dataTable, ele pega os botões carregados anteriormente.

Exemplo: abro a tela e me exibe registro do Joaquim, do João e do Mateus. Eu escrevo Mateus no filtro e ele recarrega via ajax a table. Quando recarrega e mando alterar ou bloquear, ele faz o processo normalmente, mas como se fosse o registro do Joaquim pois ele era o primeiro da tabela anterior (como se ficasse algo em cache).

No actionListener dos botões eu uso a seguinte EL pra passar os parâmetros: #{meuBean.metodo(cliente)}. O cliente é o var que está definido na dataTable.

Funciona normalmente se eu apenas abrir a página e alterar, bloquear, desbloquear, etc. O problema só acontece quando eu uso um sort ou filtro feito por mim mesmo porém recarregando via ajax. Obs.: Ainda não testei o paginator, mas creio que ocorrerá o mesmo problema.

Obrigado novamente!

S

esdras_63:
sfidencio:
esdras_63:
sfidencio:
Amigo, percebi que vc ta usando f:ajax, tente usar p:ajax, pois o mesmo está integrado nos Render nativo do core do primefaces, outrosim, tome cuidado, eu tive esse problemas, se você estiver trabalhando na mesma página com bastante ajax, tente limpar a árvore de componentes, pode ser por isso que ele não ta te dando valor setado, isso se você está fazendo request ajax para o servidor, se o problema está no Client Side, tente usar os métodos javascript no Primefaces Jquery. tipo

widgetVarDataTable.getPaginator().setPage(MINHA_PAGINA_INDEX);

widgetVarDataTable.clearFilters();


Opa! Valeu pela resposta e acho que vai dar certinho pra mim. Eu estava atrás de um código que limpasse a árvore, porém não sei o que é o MINHA_PAGINA_INDEX que você mencionou.

Mais uma vez obrigado!

Perai, vamos separar o joio do trigo… :smiley:

esse código ai é javascript, esse MINHA_PAGINA_INDex, é o numero da pagina do p:datTable no cliente, certo?, agora quanto limpar a arvore de compontes, é um método que fica do lado do servidor, que responsavel por setar null, nas propriedades da request dentro do JSF LifeCycle.

O Rafael Pontes aborda isso com franqueza. segue:

http://www.rponte.com.br/2011/06/07/limpando-a-arvore-de-componentes/


Opa! Na verdade não creio que seja esse meu problema, pois não é somente com o botão alterar, e sim com os bloquear dentre outros. Quanto a parte de limpar os inputs como descrito no blog, eu faço normalmente.

O que está acontecendo comigo é que aparentemente, quando mando via ajax recarregar a dataTable, ele pega os botões carregados anteriormente.

Exemplo: abro a tela e me exibe registro do Joaquim, do João e do Mateus. Eu escrevo Mateus no filtro e ele recarrega via ajax a table. Quando recarrega e mando alterar ou bloquear, ele faz o processo normalmente, mas como se fosse o registro do Joaquim pois ele era o primeiro da tabela anterior (como se ficasse algo em cache).

No actionListener dos botões eu uso a seguinte EL pra passar os parâmetros: #{meuBean.metodo(cliente)}. O cliente é o var que está definido na dataTable.

Funciona normalmente se eu apenas abrir a página e alterar, bloquear, desbloquear, etc. O problema só acontece quando eu uso um sort ou filtro feito por mim mesmo porém recarregando via ajax. Obs.: Ainda não testei o paginator, mas creio que ocorrerá o mesmo problema.

Obrigado novamente!

Pode ser que você está dando update nos componentes, mas está esquecendo de processá-los na requisição, verifique o atributo process, que recebe como value, @this, @form, @parent… ou o ID do componente que queira submeter na requisição.

E

Não deu certo. Estou largando mão do basic row selection, tem um jeito aqui com o multiple row que estou fazendo.

Obrigado mesmo assim com as respostas.

L

leonardoteles:
Opa, bom dia. Primeiramente obrigado pela resposta…

Tentei usar o <p:ajax> como vc disse mas não funcionou! Na verdade, o link parou de funcionar com essa tag…

Estou seguindo um livro que faz exatamente assim…só uso ajax nesse ponto da página!

em relação à usar o jquery nesse meu problema, teria um exemplo pra me dar?

esse widgetVarDataTable.getPaginator().setPage(MINHA_PAGINA_INDEX); eu colocaria aonde no meu contexto?

Obrigado e bom dia, mais uma vez!!!

Então eu usei isso, por exemplo, quando eu adicionava um novo registro na p:dialog, as vezes nao funcionada dar um reRender/update na DataTable, ai eu via JS, delegava para para minha datTable ir para primeira pagina sempre. Mas pelo que entendi, seu problema e no filtro paginado…, humm

<h:form id="listagem">  
                <p:dataTable value="#{contratoBean.lista}" var="id" rendered="#{!empty contratoBean.lista}" rules="rows" cellpadding="5"  
                             paginator="true" rows="10" rowsPerPageTemplate="10,15,20" emptyMessage = "Nenhum contrato encontrado com o parâmetro especificado.">

Opa…blz?

lá na página xhtml vc pode ver, no botão de edição, que dou um “render = :edicao”…isso pq na lógica do negócio, quando chamo o método de edição na mesma página, estou chamando esse cara aqui

<blockquote>

public String editar(){

this.recuperaFormulario = this.contrato.getDgco();

return “/restrito/atualizarContrato”;

}</blockquote>

dependendo da ação que queira fazer, chamo uma variável de nome “recuperaFormulario”, que vai fazer o redirecionamento pra página de edição(no caso a mesma) que eu quero…vou postar meu bean aqui pra vc dar uma olhada, blz?

o list que vc está vendo chama só um método da interface ItemContratoDAO…nada demais…

<blockquote>public List listar(){

return this.itemContratoDAO.lista()

}</blockquote>

que chama o método da interface ItemContratoDAO, assim…

obrigado pela ajuda!

L

esdras_63:
Não deu certo. Estou largando mão do basic row selection, tem um jeito aqui com o multiple row que estou fazendo.

Obrigado mesmo assim com as respostas.

opa…vi que vc conseguiu resolver com o multiple row…mas como vc faz pra editar o campo com esse componente?..pelo que entendi, ele só exibe os valores da linha!!

tem como editár o campo com ele?

E

leonardoteles:
esdras_63:
Não deu certo. Estou largando mão do basic row selection, tem um jeito aqui com o multiple row que estou fazendo.

Obrigado mesmo assim com as respostas.

opa…vi que vc conseguiu resolver com o multiple row…mas como vc faz pra editar o campo com esse componente?..pelo que entendi, ele só exibe os valores da linha!!

tem como editár o campo com ele?


Não entendi muito bem sua pergunta. Eu fis da mesma forma que faria com o instant row, porém apenas pegando o primeiro de todos os selecionados ou pegando nenhum caso o cara selecione 2 ou mais. Você pode tentar usar instant row, não da certo aí? Eu não podia, pois já estava usando o multiple row pra outras finalidades e não tem como deixar os dois juntos.

L

leonardoteles:
esdras_63:
Não deu certo. Estou largando mão do basic row selection, tem um jeito aqui com o multiple row que estou fazendo.

Obrigado mesmo assim com as respostas.

opa…vi que vc conseguiu resolver com o multiple row…mas como vc faz pra editar o campo com esse componente?..pelo que entendi, ele só exibe os valores da linha!!

tem como editár o campo com ele?

Aqui, no meu caso, tenho uma coluna na tabela com um botão de edição da linha…queria saber se tem como editar essa linha utilizando o instant row?..como estou tentando resolver outro problema aqui, não tentei esse…se vc confirmar que não dá, nem vou perder meu tempo tentando depois…

obrigado!!

E

leonardoteles:
leonardoteles:
esdras_63:
Não deu certo. Estou largando mão do basic row selection, tem um jeito aqui com o multiple row que estou fazendo.

Obrigado mesmo assim com as respostas.

opa…vi que vc conseguiu resolver com o multiple row…mas como vc faz pra editar o campo com esse componente?..pelo que entendi, ele só exibe os valores da linha!!

tem como editár o campo com ele?

Aqui, no meu caso, tenho uma coluna na tabela com um botão de edição da linha…queria saber se tem como editar essa linha utilizando o instant row?..como estou tentando resolver outro problema aqui, não tentei esse…se vc confirmar que não dá, nem vou perder meu tempo tentando depois…

obrigado!!

Tem sim! Da uma olhadinha nos exemplos do prime…

I

Você já tentou colocar id nas colunas?
<p:column id=“colNumero” sortBy="#{item.numero}"/>
Pode resolver seu problema

L

opa…voltando ao tópico pra dizer que não consegui sair desse problema ainda!!

colocando o id não funciona…será que alguém teria outra idéia de como resolver essa situação!!!

obrigado!!!

E

leonardoteles:
opa…voltando ao tópico pra dizer que não consegui sair desse problema ainda!!

colocando o id não funciona…será que alguém teria outra idéia de como resolver essa situação!!!

obrigado!!!

Eu também não consegui resolver, mas contornei com outra opção. Tente usar o instant row selection ou multiple row, tem vários exemplos desses no site do primefaces.

L

opa…blz?

utilizando o filtering e o sorting, minha aplicação está funcionando na boa…o problema é que quando filtro.

O registro que eu seleciono não vem…o form é populado pelo pelos dados da linha corresposndente dá primeira página!!

Quando eu vou navegando sem filtrar nada, ele funciona sem problema!!

Usar os ‘instant row selection ou multiple row’ não resolveria minha situação por que a tabela tem muitos dados…o usuário precisa de uma ferramenta de busca pra poder automatizar o processo dele, sacou?!?

De qualquer forma, muito obrigado pela idéia…

Abraço!!!

L

opa galera, bom dia!!

venho dizer que consegui resolver o meu problema da forma como eu queria/precisava.

sfidencio, sua dica foi a que me salvou. O ajax estava setando a linha correspondente da primeira página pq eu estava renderizando com o <f:ajax execute="@this". Quando mudei para <f:ajax execute="@form" ele passou a pegar o da linha que eu busco no filtering e no sorting tbm…

muito obrigado a todos pela força!!!

Criado 1 de junho de 2012
Ultima resposta 26 de jul. de 2012
Respostas 26
Participantes 5