Problema na validação do rich:calendar com JSF

16 respostas
B

Pessoal… Tenho duas datas, a dataInicial e dataFinal, sendo que no evento onblur da dataFinal eu preciso fazer uma validação para que a dataFinal não seja menor do que a dataInicial,
retornando em seguida uma mensagem através da do FacesMessage.

No momento não estou conseguindo fazer essa validação.

<h:outputText value="#{messages['label.usuario.final_vigencia']}:" styleClass="negrito" /> <a4j:outputPanel id="panelData"> <s:decorate template="input.xhtml"> <rich:calendar showWeeksBar="false" id="dataFinal" enableManualInput="true" value="#{cadastroUsuario.dtFinal}" styleClass="input this_field" datePattern="dd/MM/yyyy" cellWidth="24px" cellHeight="22px" maxlength="12" ajaxSingle="true" required="true" requiredMessage="#{messages['error.campo_requerido']}" process="dataFinal, dataInicial" validator="#{manterUsuario.validarDataDeVigencia()}"> <rich:ajaxValidator event="oninputblur" /> </rich:calendar> </s:decorate> </a4j:outputPanel>

Esse é o meu código XHTML.
Ao ir para o metodo do validator… os meus atributos dtFinal e dtInicial estão indo null… Porém eu to colocando-os no process.

Alguém tem uma sugestão?

Desde já, muito obrigado.

16 Respostas

B

Alguém passou por isso?

B

Não consegui solução ainda… alguém ai?

D

Você precisa criar um metodo que faça a validação para ti, implicando que o restante do seu codigo seja executado a partir do return ( true || false ) deste metodo …

R

Poste o seu método de validação

B
digaoneves:
Poste o seu método de validação
public void validarDataDeVigencia() {
				
		if(this.getDtInicial() != null){	
			if(this.getDtInicial().equals("") || this.getDtInicial() == null){
				FacesMessages.instance().addToControl("dataInicioVigencia", new ServiceException("Preencha o campo Inicio da vigência").getMessage());
				return;
			} else if(this.getDtInicial().after(this.getDtFinal())){
				FacesMessages.instance().addToControl("dataFimVigencia", new ServiceException("Data final não pode ser maior que a data inicial").getMessage());
				return;
			}
		}
	}

Valeu pela colaboração pessoal.

D

Mas e aí o problema ainda perciste ?

R

O problema é que as datas estão nulas quando esse método é invocado, certo?

você pode tentar adicionar uma tag de ajax, para garantir que o valor da data seja enviado para o seu model, dessa forma: <rich:calendar id="dataInicial" enableManualInput="true" value="#{meuBean.dataInicial}" datePattern="dd/MM/yyyy"> <f:ajax event="inputblur" execute="@this" render="@this"/> </rich:calendar>

D

digaoneves:
O problema é que as datas estão nulas quando esse método é invocado, certo?

você pode tentar adicionar uma tag de ajax, para garantir que o valor da data seja enviado para o seu model, dessa forma: <rich:calendar id="dataInicial" enableManualInput="true" value="#{meuBean.dataInicial}" datePattern="dd/MM/yyyy"> <f:ajax event="inputblur" execute="@this" render="@this"/> </rich:calendar>

Acredito que isso resolva, mas se não der certo vai no seu Bean e printa no console o que está chegando da sua data inicial …

B

digaoneves:
O problema é que as datas estão nulas quando esse método é invocado, certo?

você pode tentar adicionar uma tag de ajax, para garantir que o valor da data seja enviado para o seu model, dessa forma: <rich:calendar id="dataInicial" enableManualInput="true" value="#{meuBean.dataInicial}" datePattern="dd/MM/yyyy"> <f:ajax event="inputblur" execute="@this" render="@this"/> </rich:calendar>

Digao… Acrescentei essa linha de código, porém, ocasionou essa exception:

<f:ajax> Tag Library supports namespace: http://java.sun.com/jsf/core, but no tag was defined for name: ajax

Ou seja, a minh aJSF não suporta essa TAG, pois ao qual estou usando, é o JSF 1.2 e essa tag é do JSF 2.0.

Sabes outro método, sendo feito com o JSF 1.2? Frisando-lhe, que utilizo richfaces 3.0 e jboss Seam 4

Valeu cara…

B

Dantch:
digaoneves:
O problema é que as datas estão nulas quando esse método é invocado, certo?

você pode tentar adicionar uma tag de ajax, para garantir que o valor da data seja enviado para o seu model, dessa forma: <rich:calendar id="dataInicial" enableManualInput="true" value="#{meuBean.dataInicial}" datePattern="dd/MM/yyyy"> <f:ajax event="inputblur" execute="@this" render="@this"/> </rich:calendar>

Acredito que isso resolva, mas se não der certo vai no seu Bean e printa no console o que está chegando da sua data inicial …

Dantch, acredito que isso funcionaria também, porém minha aplicação, utiliza JSF 1.2 por padrão da empresa ao qual trabalho.

Sabes outra forma de fazer o mesmo, porém com o JSF 1.2?

Valeu cara…

D

buiutb, o que quis dizer é que pode usar um: System.out.print("Ideia: "+getInicio());

apenas para saber se está chegando “null”, se isso estiver acontecendo, tu tomas outras medidas para resolver o caso …

R

existe a tag a4j:ajax também, só que não sei se ela ja existe no richfaces 3, dê uma pesquisada aí.

B

Dantch:
buiutb, o que quis dizer é que pode usar um: System.out.print("Ideia: "+getInicio());

apenas para saber se está chegando “null”, se isso estiver acontecendo, tu tomas outras medidas para resolver o caso …

Ah sim Dantch… Fiz isso já quando me deparei com esse problema… Ele realmente vem null da tela…

Outras medidas… Já passasse por isso?

B

existe a tag a4j:ajax também, só que não sei se ela ja existe no richfaces 3, dê uma pesquisada aí.

Digao… infelizmente, ele so tem suporte no richfaces 4.0 e o richfaces que uso no sistema é 3.3.3…

Acho que a solução no momento, é resolver através de JavaScript… Ou, conheces outro modo de contornarmos esse caso?

Do mesmo modo… Muito obrigado ai pela contribuição no tópico.

Abraço.

D

sim, já tive o mesmo problema, mas não fiquei no projeto até o final, então não peguei toda resolução …

Já tentou utilizar a API Calendar e Date do Java pra isso, pode funcionar, aí tu só vai precisar chamar os valores já validados. Então apresentá-os usando um &lt;h:outputText value="#{seuBean.hrIni}" /&gt; &lt;h:outputText value="#{seuBean.hrFim}" /&gt;

B

Dantch:
sim, já tive o mesmo problema, mas não fiquei no projeto até o final, então não peguei toda resolução …

Já tentou utilizar a API Calendar e Date do Java pra isso, pode funcionar, aí tu só vai precisar chamar os valores já validados. Então apresentá-os usando um &lt;h:outputText value="#{seuBean.hrIni}" /&gt; &lt;h:outputText value="#{seuBean.hrFim}" /&gt;

Mas fazendo desse modo… perderia então a função do rich:calendar e seus aspectos visuais…

Mas vou testar isso amanhã e ver no que vai dar… Valeu.

Criado 12 de junho de 2012
Ultima resposta 13 de jun. de 2012
Respostas 16
Participantes 3