miércoles, 21 de agosto de 2013

Validar un rango de fechas usando el componente Calendar de Primefaces (sin complicarnos)

Para quienes vivimos el día a día desarrollando aplicaciones con java, es normal que siempre surjan requerimentos que para su solución los desarrolladores nos rompamos la cabeza buscando alternativas, muchas veces sobredimensionando la complejidad real de la solución, complicándola mucho mas allá de lo que realmente es necesario; y claro, en muchas ocasiones al mirar ya con cabeza fría dichas soluciones, asombra la facilidad y lo obvia que resulta dicha solución. Y menciono ésto, pues puntualmente en la actualidad, al generar un reporte en donde tuve un caso de validación de dos fechas, donde una fecha final no puede ser anterior a una fecha inicial, me di demasiadas vueltas en un mismo tema, para terminar dándome cuenta que la solución fue muchísimo más facil de lo que habría pensado.

Como se ve en la imagen, el reporte está en directa dependencia de un rango de fechas, por tanto una fecha final no puede ser anterior a la inicial.

Como gran fan de la librería Primefaces, uso para éste caso el componente Calendar, el mismo que se desplegará visualmente de la siguienta manera:


NOTA: Usando javascript genero una función para limitar el ingreso por teclado con onkeypress, obligando al usuario a que necesariamente obtenga una fecha seleccionándola del componente Calendar y que así no ingrese información basura.

El Código ligado a los componentes  Calendar es el siguiente:



En donde, en el primer componente calendar mediante ajax: actualizo el segundo componente calendar, limitando el rango de selección en la fecha final mindate="#{nacidoVivoRenaviController.FInicial}" sin que pueda ser anterior a la fecha inicial previamente seleccionada, como puede verse en la imagen siguiente se desabilitan los dias que no cumplan con el criterio:


 y en el segundo componente calendar, envío la fecha inicial como atributo y la comparo con la fecha final que invoca un validador, el cual generará un error en caso de que la fecha final no cumpla con el criterio, claro, como lo dije previamente con javascript impido que el usuario ingrese informacion manualmente, pero para fines didácticos tambien he añadido el validador:


Y en caso de violarse el criterio de rango de fechas se mostraría el siguiente mensaje emergente:


NOTA: Este post se basó en un excelente artículo hallado en daily bugs

5 comentarios:

Wagner Graciano dijo...

Santigo, le felicito por este ejemplo, practico y muy sencillo que me enseñó a trabajar con el rango de fechas.
Saludos.

Santiago Tapia dijo...

Estimado Wagner, muchas gracias tus palabras, aquí simplemente trato de poner cosas interesantes que van ocurriendo en el día a día; y me da mucha alegría que te haya sido de utilidad. Un fuerte abrazo.

Wagner Graciano dijo...

Hola Santiago, no estoy logrando adaptar el ejemplo a otro proyecto.
Si puedas enviarme el paquete (classes y páginas) quizá se me aclare mejor.
me gusto su ejemplo pues es sencillo pero me cuesta trabajo adaptarlo.
Gracias.

Santiago Tapia dijo...

Wagner, dame tu email y te mando el código!

carlos dijo...

muy bueno el post, excelente material.
estoy trabajando con rango de
fechas y tengo problemas
podriamos estar en contacto
para que me ayudes,
es para un trabajo final
para recibirme.