[RESOLVIDO] erro ao renderizar p:calendar para outro p:calendar

8 respostas
LipeJava

tive um problema com uma tela, onde quando mudar a data de um campo ele renderize para o outro campo!
mas naum esta funcionando.

Primeiro campo de data

<h:outputText value="#{msg.data}"/>
<p:calendar id="dtReposicao" value="#{managedLancamentoAulaReposicao.lancamentoAula.data}" 
	pattern="dd/MM/yyyy" navigator="true" >
	<p:ajax event="change" action="#{managedLancamentoAulaReposicao.validarVenctoReposicao}" />
</p:calendar>

metodo

public void validarVenctoReposicao(){
		Integer dias = 30;  
        Date dataAlterada = lancamentoAula.getData();
           
        GregorianCalendar gc = new GregorianCalendar();     
        gc.setTime(dataAlterada);     
        gc.set(Calendar.DATE, gc.get(Calendar.DATE) + dias);     
        dataAlterada = gc.getTime();
        dataPagto = dataAlterada;
        System.out.println("-=-=-=-=-=-=-|dataPagto: "+dataPagto);
	}

ee aqui ele deve mandar um valor 30 dia pra frente do anterior digitado

<h:outputText value="#{msg.dataVencimento}"/>
<p:calendar id="dtVencto" value="#{managedLancamentoAulaReposicao.dataPagto}" pattern="dd/MM/yyyy" 
	navigator="true" />

O problema que não funciona a action, e assim naum muda a segunda data!

8 Respostas

caio.gaspar

tenta utilizar o atributo do calendar

selectListener e/ou onSelectUpdate

selectListener="#{managedLancamentoAulaReposicao.validarVenctoReposicao}"

o metodo precisa ter o paremetro

public void validarVenctoReposicao(DateSelectEvent event)
{  .... }
LipeJava

Caio, obrigado pela ajuda. Funcionou, mas ainda tem um detalhe…
quando informo a nova data ele não atualiza, se informo novamente ele atualiza.
Creio q a variavel não pegou o valor novo e calcula pelo valor antigo! ai quando clico denovo ele pega o valor anterior e assim ele sempre fica atrasado.

caputojf1

Tá falantando o update…

<p:ajax event="change" update="dtVencto" />
LipeJava

Já havia colocado o onSelectUpdate.
o problema que ele faz o calculo antes de atualizar o valor da variavel.

caputojf1

Você colocou o código dessa maneira??

<h:outputText value="#{msg.data}"/>  
 <p:calendar id="dtReposicao" value="#{managedLancamentoAulaReposicao.lancamentoAula.data}"   
     pattern="dd/MM/yyyy" navigator="true" >  
     <p:ajax event="change" action="#{managedLancamentoAulaReposicao.validarVenctoReposicao}" update="dtVencto"/>  
 </p:calendar>
LipeJava

havia feito primeiramente desta forma, mas não funcionou, não entra na action!
Ai mudei, usei o selectListener e onSelectUpdate

<h:outputText value="#{msg.data}"/>
<p:calendar id="dtReposicao" value="#{managedLancamentoAulaReposicao.lancamentoAula.data}" 
	pattern="dd/MM/yyyy" navigator="true" selectListener="#{managedLancamentoAulaReposicao.atualizarDataVencto}" 
	onSelectUpdate="dtVencto" />

Desta forma fuicionou…
quando mudo o valor ele entra no método, e do outro geito nem entrava!

Agora digamos que coloquei 30/04/2011, ele entra no método com o dia de hoje e atualiza(sendo que deveria ter retornado 30/05)!
quando mudo denovo para 01/05 por exemplo, ele atualiza para 30/05, o valor anterior e assim sucessicamente!

caputojf1

tenta dessa forma…
na página faz isso…

<h:outputText value="#{msg.data}"/>    
 <p:calendar id="dtReposicao" value="#{managedLancamentoAulaReposicao.lancamentoAula.data}"     
     pattern="dd/MM/yyyy" navigator="true" >    
     <p:ajax event="change" process="dtReposicao" update="dtVencto"/>    
 </p:calendar>

e no outro campo faz assim:

<h:outputText value="#{msg.dataVencimento}"/>  
 <p:calendar id="dtVencto" value="#{managedLancamentoAulaReposicao.dataPagto}" pattern="dd/MM/yyyy"   
     navigator="true" />

e no método getDataPagto voce implementa sua regra…assim:

public Date getDataPagto(){
		Integer dias = 30;    
		Date dataAlterada = lancamentoAula.getData();  

		GregorianCalendar gc = new GregorianCalendar();       
		gc.setTime(dataAlterada);       
		gc.set(Calendar.DATE, gc.get(Calendar.DATE) + dias);       
		dataAlterada = gc.getTime();  
		dataPagto = dataAlterada;  
		System.out.println("-=-=-=-=-=-=-|dataPagto: "+dataPagto);		

		return dataPagto;
	}

Acho q dessa forma irá funcionar…pelo menos aki eu testei e funcionou…

Abs

LipeJava

caputojf1, obrigado deu certo aki!

Criado 26 de abril de 2011
Ultima resposta 27 de abr. de 2011
Respostas 8
Participantes 3