Hola a todos, hace tiempo no escribia pero vuelvo a retomar labores... en esta ocación colocare un código muy sencillo para validar si una fecha fue seleccionada desde un calendar de faces. Esto lo cree alguna vez debido a que algunas veces seleccionaban el botón de siguiente y no se seleccionaba la fecha y a nivel de la capa de la lógica no estaba validando este valor y eso ocacionaba un error
<s:decorate id="fechaFin" template="/layout/edit.xhtml">
<ui:define name="label">
<h:outputText value="Fecha hasta" />
</ui:define>
<rich:spacer width="10"/>
<rich:calendar id="fechaFinValue" value="#{filterProcessorNew.fechaFin}"
datePattern="yyyy-MM-dd" onchanged="setFechaFin(this.value)" />
</s:decorate>
<rich:panel align="left" rendered="#{filterProcessorNew.isOpen}" style="border:0;" >
<s:div styleClass="actionButtons">
<a4j:commandButton value="filtrar" action="#{filterProcessorNew.doFilter(filterList)}" id="filtro" reRender="#{tableName}" onclick="validaDate()">
</a4j:commandButton>
</s:div>
</rich:panel>
<script type ="text/javascript" >
var fechaFin;
var fechaIni;
function setFechaFin(fechaF){
fechaFin = fechaF;
}
function setFechaIni(fechaI){
fechaIni = fechaI;
}
function validaDate(){
if(fechaIni == null && fechaFin == null)
alert('No selecciono un rango de fechas para el filtro, favor seleccionarlas');
else if(fechaIni == null)
alert('Fecha Inicial vacia, favor seleccionar una fecha para el filtro');
else if(fechaFin == null)
alert('Fecha Final vacia, favor seleccionar una fecha para el filtro');
}
</script>
Como pueden ver uso ajax y valido si las variables estan nulas, esto como para que se valide antes de hacer el llamado al bean y tenga que devolver el error, en ocaciones es preferible validar este tipo de datos a nivel de la capa de presentación mejorando el tiempo de respuesta sin embargo no cabe de más que este tipo de variables sean validadas en la capa de negocio; o simplemente cuando solo se tiene una página web que no tiene capa de negocios. Espero les haya sido de ayuda y hasta una próxima ocación.
<s:decorate id="fechaFin" template="/layout/edit.xhtml">
<ui:define name="label">
<h:outputText value="Fecha hasta" />
</ui:define>
<rich:spacer width="10"/>
<rich:calendar id="fechaFinValue" value="#{filterProcessorNew.fechaFin}"
datePattern="yyyy-MM-dd" onchanged="setFechaFin(this.value)" />
</s:decorate>
<rich:panel align="left" rendered="#{filterProcessorNew.isOpen}" style="border:0;" >
<s:div styleClass="actionButtons">
<a4j:commandButton value="filtrar" action="#{filterProcessorNew.doFilter(filterList)}" id="filtro" reRender="#{tableName}" onclick="validaDate()">
</a4j:commandButton>
</s:div>
</rich:panel>
<script type ="text/javascript" >
var fechaFin;
var fechaIni;
function setFechaFin(fechaF){
fechaFin = fechaF;
}
function setFechaIni(fechaI){
fechaIni = fechaI;
}
function validaDate(){
if(fechaIni == null && fechaFin == null)
alert('No selecciono un rango de fechas para el filtro, favor seleccionarlas');
else if(fechaIni == null)
alert('Fecha Inicial vacia, favor seleccionar una fecha para el filtro');
else if(fechaFin == null)
alert('Fecha Final vacia, favor seleccionar una fecha para el filtro');
}
</script>
Como pueden ver uso ajax y valido si las variables estan nulas, esto como para que se valide antes de hacer el llamado al bean y tenga que devolver el error, en ocaciones es preferible validar este tipo de datos a nivel de la capa de presentación mejorando el tiempo de respuesta sin embargo no cabe de más que este tipo de variables sean validadas en la capa de negocio; o simplemente cuando solo se tiene una página web que no tiene capa de negocios. Espero les haya sido de ayuda y hasta una próxima ocación.
Comentarios
Publicar un comentario