Componente <p:ajax> primefaces não atualiza campo da tabela [RESOLVIDO]

1 resposta
java
D

Pessoal,

Estou com um pequeno problema ao tentar atualizar alguns campos da minha tabela, tenho dois campos um onde é renderizado um numero inteiro e outro que renderiza uma data.

Essa tabela ela deve ter um checkbox para o usuário selecionar a linha que desejar, incialmente usei o componente de seleção múltipla do primefaces(selectionMode=“multiple”), só que ao debugar verifiquei que os dados que estavam sendo passados eram os valores antigos, coloquei o componente de ajax dentro dos meus campos e não funcionou.

Tirei os componentes de seleção múltipla da tabela e não funcionou, ao realizar o submit da tabela peguei no meu bean a tabela pelo seu ID só que quando uso o método getValues() do componentes os valores continuam sendo os antigos.

Abaixo segue o trecho da minha página e do meu bean.

Página:

`
<p:dialog id=“modalNovosParametrosRecesso” header="Salvar Novos Parâmetros de Estagiário"
widgetVar="widgetvarNovoParametro"
draggable=“true” resizable="false"
closable=“false” modal=“true” width=“630”>

<h:outputText styleClass="modalRecessoAuto" value="#{msg.MN064}" escape="false" />
             
              <br />   
             <h:panelGroup>
				<br />
				<p:dataTable id="tableRegRecessoAuto" var="recessoAuto"
					value="#{parametroEstagiarioMB.visao.listaOcorrenciaRegistroRecesso}"
					styleClass="hide-column-names" rowIndexVar="rowIndex" >

					<p:column style="width:98px;">
						<h:outputLabel value="#{rowIndex+1}º Recesso de " style="color: #0039BA" />
						<p:inputText value="#{recessoAuto.diasRecesso}" size="2">
						    <p:ajax event="blur" update="@this" ignoreAutoUpdate="true"	global="false" />
						</p:inputText>
						
						<h:outputLabel value="dia(s) começando em " style="color: #0039BA" />
						<p:inputMask value="#{recessoAuto.dtInicioOcorrencia}"	mask="99/99/9999" size="10">
							<f:convertDateTime pattern="dd/MM/yyyy" locale="pt_BR" />
							<p:ajax event="blur" update="@this" ignoreAutoUpdate="true"	global="false"/>								
						</p:inputMask>
						
						<h:outputLabel value=" e finalizando em " style="color: #0039BA; margin-left: 5px;"/>
						<h:outputLabel id="dtLbl1" value="#{recessoAuto.dtFimOcorrencia}"	style="color: #0039BA; margin-left: 5px;" >
						   <f:convertDateTime for="dtLbl1" pattern="dd/MM/yyyy" locale="pt_BR"/>
						</h:outputLabel>
					</p:column>
</p:dataTable>
			</h:panelGroup>
			
			
			<div style="padding-left: 170px;">
			    
				<p:commandLink id="commandLinkRecessoAuto"
				               styleClass="btnLaranja marginTop"
				               action="#{parametroEstagiarioMB.salvarRecessoPrimeiraParametrizacao}"
					           update="schedule :form_dialogo_mensagem" ignoreAutoUpdate="true" global="false">
					<span>Confirmar</span>
				</p:commandLink>					
              
				<p:commandLink styleClass="btnLaranja marginTop"
								id="btnCancelarRecessoAuto"
								oncomplete="PF('widgetvarNovoParametro').hide();"
								ignoreAutoUpdate="true" global="false" actionListener="#{parametroEstagiarioMB.cancelar}">
								<f:setPropertyActionListener
									target="#{parametroEstagiarioMB.visao.exibirModal}"
									value="#{false}" />									
								<span>Cancelar</span>
				</p:commandLink>
				
				<p:commandLink styleClass="btnLaranja marginTop"
				               id="btnVerRegrasAuto"
				               oncomplete="PF('widgetvarModalRegras').show();"
				               ignoreAutoUpdate="true" global="false">
				               <span>Regras</span>
				</p:commandLink>
			</div>  
        
        </p:dialog>

`

`
public void salvarRecessoPrimeiraParametrizacao(){

int count = 0;		
	
	final DataTable dataTable = (DataTable) FacesContext.getCurrentInstance().getViewRoot()
			.findComponent(":frmFiltro:tableRegRecessoAuto");
	
	List<OcorrenciaPonto> teste = new ArrayList<OcorrenciaPonto>();
	
	for(OcorrenciaPonto c : (List<OcorrenciaPonto>) dataTable.getValue()){
		teste.add(c);
		count+=1;
	}
	
	
	if(!visao.getListaRecessoParametrizacao().isEmpty()){
		for(OcorrenciaPonto ocorrencia : visao.getListaRecessoParametrizacao()){
			 count += 1;
			 if(DataUtil.verificarSeDataEhIgual(ocorrencia.getDtInicioOcorrencia(), ocorrencia.getDtFimOcorrencia()) || 
			    DataUtil.verificarSeDataEhMaior(ocorrencia.getDtInicioOcorrencia(), ocorrencia.getDtFimOcorrencia()) ||
			    DataUtil.validarData(new SimpleDateFormat().format(ocorrencia.getDtInicioOcorrencia())) == null){
				 
				    visao.getEntidade().getEstagiario().adicionarMensagem("MN052");   
					super.adicionaListaMensagemDeErro(visao.getEntidade().getEstagiario().getMensagens());
					RequestContext.getCurrentInstance().update(PF_MODAL_MSG_ERRO);
					break;
			 }else{
				 if(visao.getListaOcorrenciaRegistroRecesso().get(count).getDiasRecesso() != ocorrencia.getDiasRecesso()){   
					 RequestContext.getCurrentInstance().execute(PF_RECESSO_AUTO);
				 }
				    
			 }
		}
	}else{
		RequestContext.getCurrentInstance().execute(PF_RECESSO_CHK);
	}
	
	
	
}

`Aqui quando eu pego o getValues() os valores permanecem os antigos, antes eu estava fazendo de outra maneira, utilizando ajax e selecionando o checkbox(que retirei) e na lista onde os valores seriam persistidos ao marcar o check verificando se foram atualizados, porém tbm não rolou.

1 Resposta

D

O problema todo estava no botão de envio das informações, troquei para actionListener e usei a propriedade do componente “process=@this” que enviou os dados atualizados.

Criado 26 de janeiro de 2016
Ultima resposta 29 de jan. de 2016
Respostas 1
Participantes 1