Verificar se data digitada é inferior a atual

Pessoal,

Estou com a seguinte dúvida e dificuldade:

Estou utilizando struts 1.2. Tenho uma action que carrega uma página jsp. Quando carrego essa página, já vem preenchido uma série de componentes (caixas de texto, combo, etc…). No meu caso, a dúvida é referente a um campo data. Quando carrego a página, a data já vem preenchida automaticamente. Só que tem uma regra que não posso editar aquela data para uma data inferior a atual. O campo data está editável e estou com dificuldade de fazer essa verificação. Se o cara digitar (editar a data que ja veio preenchida)uma data inferior, deve informar que a data é inferior a atual e não permitir a tal edição.

Essa verificação acho que não dá pra fazer na action porque teria que recarregar a página e aí da m*** (creio eu…). Essa verificação eu faria onde? Na JSP???

Pensei em fazer essa verificação em javascript mas se um usuário maudoso desabilitar o javascript no navegador ele consegue editar para uma data inferior.

O código referente a minha data na action está assim:

SimpleDateFormat fmt = new SimpleDateFormat("dd/MM/yyyy");
Date data = new Date();
String inicioVigenciaStr = fmt.format(data);
request.setAttribute("inicioVigenciaStr", inicioVigenciaStr);

Guardei na request e depois exibi no campo data da jsp.

primeira_data.after(outra_data)

primeira_data.before(outra_data)

Amigão…até aí eu sei que existe o before(), after() e o compareTo() mas quero saber onde faço a verificação e de que forma posso fazer de acordo com o local…se é na jsp ou na action…Valeu mesmo assim!

vc pode fazer logo após dar o new Date();

Faz na action, você envia a data atual pra jsp… quando o usuario submeter vc verifica a data novamente antes de finalizar a operacao do usuario … pega o form q foi atualizado para o campo data e verifica c é menor que o getTime()(formatado de acordo com a data que vc esta utilizando).

Ok. Então eu faria essa verificação na minha action. Só que essa action é só pra carregar uma determinada página. A edição da data ocorrerá após a página estar carregada. Essa que é a dúvida chave. O mais fácil seria fazer em javascript mas cai naquela questão que mencionei anteriormente, de alguém desabilitar javascript no navegador. A verificação acho que deveria ser feito na jsp, pois ao digitar uma data inferior, já gerava um erro e não permitiria datas inferiores a atual.

Ex:

Data: 17/11/2010 (preenchido automaticamente ao carregar a página)

Com a página já carregada, tento alterar a dara para:

Data: 16/11/2010 (Não deveria permitir data inferior mas pode permitir edição para data superior a atual)

rjbcordeiro,

Como ficaria após o new Date que vc disse???

if (data.before(data)) ??

Caso alguém já tenha passado por problema semelhante e conheça uma solução, agradecerei a ajuda.

Entendi o que vc quis dizer. Então eu faria essa verificação em outra action. Faria a varificação numa action de inclusão dos dados na página. Chamarei a action de inclusão e nessa action farei a verificação se a data digitada é menor que a atual.

Isso, você irá verificar se a data e menor no action que você confirma os dados do formulario, ai vc manipula … c a data tiver menor… enviar uma mensagem avisando que a data tem que ser maior, caso contrario… continua a operação com sucesso :smiley: e pronto

vc pode fazer na jsp. tipo utiliza ajax e no onchange do campo, vc vai no servidor, faz a verificação e ok.

Cara, eu não sei nada de Ajax. Não utilizo isso aqui no trabalho. Tem como me ajudar? Pode ser um tutorial ou um exemplo…Pensei que na jsp seria melhor…

Aqui uso um pouco de javascript mas não é muito seguro…

Opa!
Tava lendo a apostila da Caelum FJ-28 e lá têm duas anotações para Data onde vc pode barrar data futura ou data passada direto na Classe:

// Imports
import javax.validation.constraints.Past;
/// ou
import javax.validation.constraints.Future;

@Past(message="Data futura não é permitida")
@Temporal(value=TemporalType.DATE)
@DateTimeFormat(pattern="dd/MM/yyyy")
	private Date dataInclusao;

//// ou 

@Future(message="Data anterior à data atual não é permitida")
@Temporal(value=TemporalType.DATE)
@DateTimeFormat(pattern="dd/MM/yyyy")
	private Date dataInclusao;

Com essas anotações vai economizar em código pra validar isso aí.
Testa ai e fala.
Abraço!

[quote=Guevara]Opa!
Tava lendo a apostila da Caelum FJ-28 e lá têm duas anotações para Data onde vc pode barrar data futura ou data passada direto na Classe:

// Imports
import javax.validation.constraints.Past;
/// ou
import javax.validation.constraints.Future;

@Past(message="Data futura não é permitida")
@Temporal(value=TemporalType.DATE)
@DateTimeFormat(pattern="dd/MM/yyyy")
	private Date dataInclusao;

//// ou 

@Future(message="Data anterior à data atual não é permitida")
@Temporal(value=TemporalType.DATE)
@DateTimeFormat(pattern="dd/MM/yyyy")
	private Date dataInclusao;

Com essas anotações vai economizar em código pra validar isso aí.
Testa ai e fala.
Abraço![/quote]

Mas esse FJ-28 ta abordando qual framework?? Essas anotações me lembraram o JPA…Essa parada aí facilita pra caramba!!

No Struts 1.2, o mecanismo de validação mais indicado é o Validator, que é configurado como um plug-in. Seu Form deve estender ValidatorForm ou ValidatorActionForm. A configuração é feita através de um XML e permite o reuso da mesma validação em diferentes contextos.

Ou você pode simplesmente sobrescrever o método validate do seu ActionForm e implementar lá a validação usando o mecanismo que você preferir. Uma abordagem comum é fazer validações simples no ActionForm e as validações mais complexas na Action, interagindo diretamente com o domínio.

Mais informações: http://struts.apache.org/1.2.4/userGuide/building_view.html#form_validation

existem vários framework em java script para lhe ajudar com ajax. um muito bom é o JQuery e acho mais amigável tb. da uma pesquisada, qualquer dúvida posta ai.

vc esta utilizando jsp “puro” ou algum framework?

Estou usando jsp com algumas funcionalidades de javascript e CSS. Temos que usar o framework do cliente (Bradesco), que é bastante exigente. Antes de chegar ao cliente, passa pela área de qualidade que verifica o código pra ver se está de acordo com os padrões. Temos que seguir os padrões…um monte de estorinha…

da uma olhada:
http://api.jquery.com/change/

quando o usuario terminar de digitar a data, vc pode ir no servidor, fazer a validação.
e com o ajax, não vai nem dar um refresh na pagina toda. tentai ai.

Estou usando jsp com algumas funcionalidades de javascript e CSS. Temos que usar o framework do cliente (Bradesco), que é bastante exigente. Antes de chegar ao cliente, passa pela área de qualidade que verifica o código pra ver se está de acordo com os padrões. Temos que seguir os padrões…um monte de estorinha…[/quote]

Eu sei como é, Tiago. Mas veja o lado do cliente… Você entra num fórum, o Naruto666 sugere que você use JBudega que é um framework “da hora”, você acha um barato porque pode colocar JBudega no seu currículo, usa o tal framework que foi feito por um sueco que já morreu, implanta a solução e lamentavelmente descobre que JBudega tinha uma falha de segurança que detonou o site do cliente.

Administrar um portifolio de soluções de TI do tamanho de um Bradesco, não é mole. Se não colocar restrições, vira uma zona. Mas concordo que usar Struts 1.2 a essa altura dos acontecimentos é gostar muito de um legadinho…

Por outro lado, os bancos usam COBOL até hoje sem ter do que reclamar. Acho que é característica do tipo de cliente.

Estou usando jsp com algumas funcionalidades de javascript e CSS. Temos que usar o framework do cliente (Bradesco), que é bastante exigente. Antes de chegar ao cliente, passa pela área de qualidade que verifica o código pra ver se está de acordo com os padrões. Temos que seguir os padrões…um monte de estorinha…[/quote]

Eu sei como é, Tiago. Mas veja o lado do cliente… Você entra num fórum, o Naruto666 sugere que você use JBudega que é um framework “da hora”, você acha um barato porque pode colocar JBudega no seu currículo, usa o tal framework que foi feito por um sueco que já morreu, implanta a solução e lamentavelmente descobre que JBudega tinha uma falha de segurança que detonou o site do cliente.

Administrar um portifolio de soluções de TI do tamanho de um Bradesco, não é mole. Se não colocar restrições, vira uma zona. Mas concordo que usar Struts 1.2 a essa altura dos acontecimentos é gostar muito de um legadinho…

Por outro lado, os bancos usam COBOL até hoje sem ter do que reclamar. Acho que é característica do tipo de cliente.[/quote]

Sei como é camarada…segurança acima de tudo.

Eu vi naquela apostila do FJ-21 da Caelum, um modelo de JQuery que mostra um calendário. Derrepente aquilo ali pode ser uma solução mas deveria bloquear as datas anteriores à atual. Alguém sabe como faço isso??? Queria permitir mostrar o calendário somente com as datas atual e posteriores habilitadas.