Lunes, 14 Julio 2014 20:30

Validacion en JSF

Escrito por 
Valora este artículo
(0 votos)

Que tal.. continuamos con los ejemplos JSF, en esta ocacion seguiremos trabajando nuestro ejemplos anteriores, que consiste en un datatable en la cual tenemos la posibilidad de agregar , eliminar y modificar filas de la tabal datatable JSF. En esta ocasión validaremos la entrada, realizaremos la correspondiente conversión y luego la validación de los datos que serán insertados en la tabla.

En primer lugar explicaremos brevemente como se implementa la conversión y  validación en JSF (recopilación de ebooks y tutos de internet).

Conversion  Validacion JSF – diferencias.

La conversión es el proceso por el cual JSF convierte los datos ingresados en la vista (como por  ejemplo el dato introducido en un inputtext) a los tipos de datos declarados en el backbean.
La validación es el proceso por el cual JSF comprueba que el formato del dato sea el correcto, es decir que si especificamos en la validación que sea un mail  con este formato Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo., jsf se encarga de revisar de que la validación declarada se cumpla, caso contrario devolverá una excepción. La conversión, propiamente dicha se encarga de que el tipo de datos de la vista se corresponda con el tipo de datos del backbean, mientras la validación se encarga de que los datos introducidos en la vista cumplan con el formato especificado ya sean en la vista o en el backbeans (un validador personalizado).

Conversión en JSF

En jsf existen dos maneras para realizar la conversión estándar.
La primera consiste en añadir el atributo converter=”#{identificadorConversor}”  al componente. Este atributo es valido para  los componentes del tipo UIInput (inputText, inputSecret, inputHidden) y outputText.
Por ejemplo
 <h:inputText converter=”#{Integer}”  value=”#{bean.propiedad}”/>
En JSF están dispuestos los siguientes conversores

TIPO DE CONVERSOR

IDENTIFICADOR DEL CONVERSOR

BigDecimalConverter

BigDecimal

BigIntegerConverter

BigInteger

NumberConverter

Number

IntegerConverter

Integer

ShortConverter

Short

ByteConverter

Byte

CharacterConverter

Character

FloatConverter

Float

DoubleConverter

Double

BooleanConverter

Boolean

DateTimeConverter

DateTime


La otra opción es la de incluir dentro de la etiqueta UIInput la etiqueta perteneciente a jsf core, como por ejemplo
<h:inputText id=”Fecha” value=”#{bean.propiedad}”>
<f:convertDateTime pattern=”dd/MM/yyyy”/>
</h:inputText>

Esta etiqueta  jsf core presenta mayor flexibilidad ya que permite incluir atributos extras, como en el ejemplo anterior podemos indicar el formato a la fecha.
Los atributos disponibles para <f:convertNumber  /> son los siguientes

NOMBRE DEL ATRIBUTO

TIPO

currencyCode

String

currencySymbol

String

groupingUsed

boolean

integerOnly

boolean

locale

java.util.Locale

maxFractionDigits

int

maxIntegerDigits

Int

minFractionDigits

Int

minIntegerDigits

int

pattern

String

type

String


Los atributos disponibles para <f:convertDateTime/> son los siguientes

NOMBRE DEL ATRIBUTO

TIPO

dateStyle

String

parseLocale

String o Locale

pattern

String

timeStyle

String

timeZone

String o TimeZone

type

String


Validación en jsf

Estos componentes implementan la interfaz javax.faces.validator.Validator, que contiene un único método validate(). A continuación un ejemplo de cómo se implemetaria una validación estándar  en jsf
<h:inputText ">        
                <f:validateLength maximum="50" />                      
 </h:inputText
>    
En el ejemplo anterior validamos que la longitud de la cadena ingresada no sea mayor a 50 caracteres. En jsf tiene los siguientes validadores estándares que a continuación se detallan en la tabla siguiente:

CLASE DE VALIDADOR

TAG JSF

ATRIBUTOS

DESCRIPCIÓN

DoubleRangeValidator

validateDoubleRange

minimum,maximum

Valida que el valor del componente sea mayor que un mínimo y mayor que un máximo. Este valor debe ser tipo float

LengthValidator

validateLength

minimum,maximum

Valida que la longitud del valor del componente esté entre un mínimo y un máximo

LongRangeValidator

validateLongRange

minimum,maximum

Valida que el valor del componente sea mayor que un mínimo y mayor que un máximo. Este valor debe ser tipo entero


Otra forma de validar en jsf, es mediante un validador personalizado, para ellos debemos hacer lo siguiente:
Crear un método de la siguiente manera

  1. public void validaMail(FacesContext fc, UIComponent uic, Object o) {
  2. //validamos o}
  3.  

donde aqui solo utilizamos el Object o, que es el valor que queremos validar.
Bien hasta aquí una breve explicación de lo que usaremos en este post (por supuesto que hay mas por saber, pero con esto nos basta por ahora).
Para seguir al ritmo de cómo empezamos podemos visitar el últimos post propuesto


En primer lugar añadiremos a nuestra clase Persona nuevos atributos. Vamos a suponer que nuestro bean Persona es un empleado de una empresa (lo podríamos cambiar a Persona por Empleado pero como el ejemplo ya empezó así , lo dejaremos tal cual esta ), agregamos estas propiedades con el objeto de poder realizar validaciones diferentes.
Teniamos NOMBRE, APELLIDO Y DIRECCION, ahora agregaremos

  • FECHA DE NACIMIENTO
  • SECTOR DE LA EMPRESA
  • SUELDO BASICO

A conitnuacion muestro como queda nuestra clase Persona

  1. public class Persona {
  2. private String nombre;
  3. private String apellido;
  4. private String direccion;
  5. private String mail;
  6. private String fechaNacimiento;
  7. private int sectorEmpresa;
  8. private double sueldoBasico;
  9.   public Persona() {
  10.   }
  11.  
  12.   public Persona(String nombre, String apellido, String direccion, String mail, String fechaNacimiento, int sectorEmpresa, double sueldoBasico) {
  13.     this.nombre = nombre;
  14.     this.apellido = apellido;
  15.     this.direccion = direccion;
  16.     this.mail = mail;
  17.     this.fechaNacimiento = fechaNacimiento;
  18.     this.sectorEmpresa = sectorEmpresa;
  19.     this.sueldoBasico = sueldoBasico;
  20.   }
  21.  
  22.  
  23.   public String getApellido() {
  24.     return apellido;
  25.   }
  26.  
  27.   public void setApellido(String apellido) {
  28.     this.apellido = apellido;
  29.   }
  30.  
  31.   public String getDireccion() {
  32.     return direccion;
  33.   }
  34.  
  35.   public void setDireccion(String direccion) {
  36.     this.direccion = direccion;
  37.   }
  38.  
  39.   public String getNombre() {
  40.     return nombre;
  41.   }
  42.  
  43.   public void setNombre(String nombre) {
  44.     this.nombre = nombre;
  45.   }
  46.  
  47.   public double getSueldoBasico() {
  48.     return sueldoBasico;
  49.   }
  50.  
  51.   public void setSueldoBasico(double sueldoBasico) {
  52.     this.sueldoBasico = sueldoBasico;
  53.   }
  54.  
  55.   public String getFechaNacimiento() {
  56.     return fechaNacimiento;
  57.   }
  58.  
  59.   public void setFechaNacimiento(String fechaNacimiento) {
  60.     this.fechaNacimiento = fechaNacimiento;
  61.   }
  62.  
  63.   public int getSectorEmpresa() {
  64.     return sectorEmpresa;
  65.   }
  66.  
  67.   public void setSectorEmpresa(int sectorEmpresa) {
  68.     this.sectorEmpresa = sectorEmpresa;
  69.   }
  70.  
  71.   public String getMail() {
  72.     return mail;
  73.   }
  74.  
  75.   public void setMail(String mail) {
  76.     this.mail = mail;
  77.   }
  78.  
  79.  
  80. }
  81.  


Ahora modificaremos nuestra clase “lista”,  el código lo mostramos a continuación
 

  1. import java.text.ParseException;
  2. import java.text.SimpleDateFormat;
  3. import java.util.ArrayList;
  4. import java.util.Date;
  5. import javax.faces.application.FacesMessage;
  6. import javax.faces.component.UIComponent;
  7. import javax.faces.component.html.HtmlDataTable;
  8. import javax.faces.context.FacesContext;
  9. import javax.faces.validator.ValidatorException;
  10.  
  11. public class Lista {
  12.   private String txtNombre;
  13.   private String txtApellido;
  14.   private String txtDireccion;
  15.   private String txtMail;
  16.   private Date txtFechaNac;
  17.   private double txtSueldoBas;
  18.   private int txtSectorEmpr;
  19.   private ArrayList<Persona> lista= new ArrayList<Persona>(){};
  20.   private Persona persona;
  21.   private int index;
  22.   private  HtmlDataTable tabla;
  23.   SimpleDateFormat fecha = new SimpleDateFormat("dd/MM/yyyy");
  24.   public Lista() {
  25.     persona= new Persona();
  26.   }
  27. public void cargarLista(){
  28. persona= new Persona(txtNombre, txtApellido, txtDireccion, txtMail, fecha.format(txtFechaNac), txtSectorEmpr, txtSueldoBas);
  29. this.lista.add(persona);
  30. }
  31. public void seleccionLista() throws ParseException{
  32.     persona=(Persona) tabla.getRowData();
  33.     this.index=tabla.getRowIndex();
  34.     this.txtApellido=persona.getApellido();
  35.     this.txtNombre=persona.getNombre();
  36.     this.txtDireccion=persona.getDireccion();
  37.     this.txtMail=persona.getMail();
  38.     this.txtSectorEmpr=persona.getSectorEmpresa();
  39.     this.txtSueldoBas=persona.getSueldoBasico();
  40.     this.txtFechaNac=fecha.parse(persona.getFechaNacimiento());
  41.  }
  42. public void eliminarLista(){
  43.     this.lista.remove(persona);
  44. }
  45. public void modificarLista(){
  46.     persona.setNombre(this.txtNombre);
  47.    persona.setApellido(this.txtApellido);
  48.     persona.setDireccion(this.txtDireccion);
  49.     try{
  50.     this.lista.set(index, persona);
  51.     }catch(Exception e){
  52.       System.out.println(e);
  53.     }
  54. }
  55.   public HtmlDataTable getTabla() {
  56.     return tabla;
  57.   }
  58.   public void setTabla(HtmlDataTable tabla) {
  59.     this.tabla = tabla;
  60.   }
  61.  
  62.   public ArrayList<Persona> getLista() {
  63.     return lista;
  64.   }
  65.   public void setLista(ArrayList<Persona> lista) {
  66.     this.lista = lista;
  67.   }
  68.   public String getTxtApellido() {
  69.     return txtApellido;
  70.   }
  71.   public void setTxtApellido(String txtApellido) {
  72.     this.txtApellido = txtApellido;
  73.   }
  74.   public String getTxtDireccion() {
  75.     return txtDireccion;
  76.   }
  77.   public void setTxtDireccion(String txtDireccion) {
  78.     this.txtDireccion = txtDireccion;
  79.   }
  80.   public String getTxtNombre() {
  81.     return txtNombre;
  82.   }
  83.   public void setTxtNombre(String txtNombre) {
  84.     this.txtNombre = txtNombre;
  85.   }
  86.  
  87.   public Date getTxtFechaNac() {
  88.     return txtFechaNac;
  89.   }
  90.  
  91.   public void setTxtFechaNac(Date txtFechaNac) {
  92.     this.txtFechaNac = txtFechaNac;
  93.   }
  94.  
  95.   public int getTxtSectorEmpr() {
  96.     return txtSectorEmpr;
  97.   }
  98.  
  99.   public void setTxtSectorEmpr(int txtSectorEmpr) {
  100.     this.txtSectorEmpr = txtSectorEmpr;
  101.   }
  102.  
  103.   public double getTxtSueldoBas() {
  104.     return txtSueldoBas;
  105.   }
  106.  
  107.   public void setTxtSueldoBas(double txtSueldoBas) {
  108.     this.txtSueldoBas = txtSueldoBas;
  109.   }
  110.  
  111.   public String getTxtMail() {
  112.     return txtMail;
  113.   }
  114.  
  115.   public void setTxtMail(String txtMail) {
  116.     this.txtMail = txtMail;
  117.   }
  118.  
  119.   public void validaMail(FacesContext fc, UIComponent uic, Object o) {
  120.   String strValue = String.valueOf(o);
  121.   if (!strValue.matches(".+@.+\\.[a-z]+")) {
  122.    throw new ValidatorException(new FacesMessage("Formato de mail incorrecto"));
  123.   }
  124.  }
  125.  
  126. }

En esta clase agregamos nuevas propiedades a la clase con respecto al ejemplo anterior:

  1.   private String txtMail;
  2.   private Date txtFechaNac;
  3.   private double txtSueldoBas;
  4.   private int txtSectorEmpr;

Las anteriores son las propiedades que se corresponderan con los inputtext de la vista.

También agregamos esta propiedad a la clase:
  SimpleDateFormat fecha = new SimpleDateFormat("dd/MM/yyyy");
Esta propiedad es para darle formato a la fecha.

También en el código observamos que tenemos un nuevo método que se llama validaMail, este método es el que será invocado en la vista cuando se quiera validar un mail, a este método lo podríamos incluir en otra clase, pero al ser uno solo en este caso lo dejamos en la clase lista, ustedes podrían ponerlo tranquilamente en otra clase para tener un código mas ordenado.
Ahora nos ocupamos de nuestra vista index.xhtml. Consecuente de lo anterior agregamos nuevos inputtext a nuestra vista index.xhtml, y también columnas a nuestro datatable.
A continuación mostramos como queda nuestro index.xhtml

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml"
  3.      xmlns:h="http://java.sun.com/jsf/html"
  4.      xmlns:f="http://java.sun.com/jsf/core">
  5.     <h:head>
  6.         <title>Ejemplo JSF</title>
  7.         </h:head>
  8.     <h:body>
  9.       <h:form>
  10.         <h:dataTable id="tabla"  value="#{lista.lista}" binding="#{lista.tabla}" var="lis">
  11.             <h:column>
  12.               <f:facet name="header">
  13.                 <h:outputText value="NOMBRE"/>
  14.               </f:facet>
  15.               <h:outputText value="#{lis.nombre}"/>
  16.             </h:column>
  17.             <h:column>
  18.               <f:facet name="header">
  19.                 <h:outputText value="APELLIDO"/>
  20.               </f:facet>
  21.               <h:outputText value="#{lis.apellido}"/>
  22.             </h:column>
  23.             <h:column>
  24.               <f:facet name="header">
  25.                 <h:outputText value="DIRECCION"/>
  26.               </f:facet>
  27.               <h:outputText value="#{lis.direccion}"/>
  28.             </h:column>
  29.             <h:column>
  30.               <f:facet name="header">
  31.                 <h:outputText value="FECHA NAC."/>
  32.               </f:facet>
  33.               <h:outputText value="#{lis.fechaNacimiento}"/>
  34.             </h:column>
  35.             <h:column>
  36.               <f:facet name="header">
  37.                 <h:outputText value="SUELDO BASICO"/>
  38.               </f:facet>
  39.               <h:outputText value="#{lis.sueldoBasico}"/>
  40.             </h:column>
  41.             <h:column>
  42.               <f:facet name="header">
  43.                 <h:outputText value="SECTOR EMPRESA"/>
  44.               </f:facet>
  45.               <h:outputText value="#{lis.sectorEmpresa}"/>
  46.             </h:column>
  47.             <h:column>
  48.               <f:facet name="header">
  49.                 <h:outputText value="MAIL"/>
  50.               </f:facet>
  51.               <h:outputText value="#{lis.mail}"/>
  52.             </h:column>
  53.               <h:column>
  54.              <f:facet name="header">
  55.               <h:outputText value="SELECCIONAR"/>
  56.              </f:facet>
  57.               <h:commandLink action="#{lista.seleccionLista}">
  58.                 SELECCION
  59.               </h:commandLink>
  60.             </h:column>
  61.           </h:dataTable>
  62.       </h:form>
  63.       <br></br>
  64.       <h:form>
  65.       <h:outputLabel for="nombre"> Nombre </h:outputLabel>
  66.       <h:inputText id="nombre" required="true" value="#{lista.txtNombre}">
  67.       <f:validateLength minimum="3" maximum="30"/></h:inputText>
  68.       <h:message  for="nombre"></h:message><br></br>
  69.       <h:outputLabel for="apellido"> Apellido </h:outputLabel>
  70.       <h:inputText id="apellido" required="true" value="#{lista.txtApellido}">
  71.       <f:validateLength minimum="3" maximum="30"/></h:inputText>
  72.       <h:message  for="apellido"></h:message><br></br>
  73.       <h:outputLabel for="direccion"> Direccion </h:outputLabel>
  74.       <h:inputText id="direccion" required="true" value="#{lista.txtDireccion}">
  75.       <f:validateLength minimum="3" maximum="50"/></h:inputText>
  76.       <h:message  for="direccion"></h:message><br></br>
  77.       <h:outputLabel for="mail"> Mail </h:outputLabel>
  78.       <h:inputText id="mail" required="true" validator="#{lista.validaMail}" value="#{lista.txtMail}" ></h:inputText>
  79.       <h:message  for="mail"></h:message><br></br>
  80.       <h:outputLabel for="fechaNac"> Fecha de Nac. </h:outputLabel>
  81.       <h:inputText id="fechaNac"  required="true" value="#{lista.txtFechaNac}">
  82.       <f:convertDateTime pattern="dd/MM/yyyy"/></h:inputText>
  83.       <h:message  for="fechaNac"></h:message><br></br>
  84.       <h:outputLabel for="sectorEmpr"> Sector de la Empresa </h:outputLabel>
  85.       <h:inputText id="sectorEmpr" required="true" value="#{lista.txtSectorEmpr}">
  86.       <f:validateLongRange minimum="0" maximum="11"/></h:inputText>
  87.       <h:message  for="sectorEmpr"></h:message><br></br>
  88.       <h:outputLabel for="sueldoBasico"> Sueldo Basico </h:outputLabel>
  89.       <h:inputText id="sueldoBasico" required="true" converter="#{Double}" value="#{lista.txtSueldoBas}">
  90. <f:validateDoubleRange minimum="0" maximum="5000"/> </h:inputText>
  91.       <h:message  for="sueldoBasico"></h:message><br></br>
  92.       <h:commandButton value="Agregar" action="#{lista.cargarLista}"></h:commandButton>
  93.       <h:commandButton value="Modificar" action="#{lista.modificarLista}"></h:commandButton>
  94.       <h:commandButton value="Eliminar" action="#{lista.eliminarLista}"></h:commandButton>
  95.       </h:form>
  96.      
  97.     </h:body>
  98.  
  99. </html>

Como se ve en el código de index.xhtml, se agregaron las columnas de la misma manera que las anteriores, lo nuevo que aparece aparece a continuación:

  1. <h:outputLabel for="sueldoBasico"> Sueldo Basico </h:outputLabel>
  2.       <h:inputText id="sueldoBasico" required="true" converter="#{Double}" value="#{lista.txtSueldoBas}">
  3.       <f:validateLongRange minimum="0" maximum="5000"/> </h:inputText>
  4.       <h:message  for="sueldoBasico"></h:message><br></br>

<h:outputLabel/> : esta  tag es la etiqueta que  nos muestra la descripcion del campo a ingresar, en este caso el atributo for indica que pertenece al campo de id “sueldoBasico”, y este se dibujara al costado del campo de entrada inputtext  sueldoBasico.

<h:inputText/> : este tag no es mas que el campo de entrada con los siguientes atributos

  • Required: en este caso, establecido a true nos indica que el campo es requerido y no tiene que ser nulo, caso contrario nos saltara una excepsion con su correspondiente mensaje.
  • Converter: este atributo nos indica a que tipo de dato será convertido para que se corresponda con el tipo de dato java declarado en el atributo value.
  • Value : el valor con el cual se corresponde con una determinada propiedad en el backbean, en este caso el bean “lista”.

 <f:validateLongRange/> :  este es el tag que que nos implementa la validacion del dato, en este caso especificamos que del tipo de validación de rango de un tipo de dato doublé. Este tag tiene los siguientes atributos:

  • Mínimum: este atributo nos dice cual es el valor minimo que podemos aceptar, en nuestro caso al valor minimo es 0.
  • Máximum = este atributo nos dice cual es el valor máximo que podemos aceptar, en nuestro caso al valor máximo es  5000.

<h:message/> : en esta etiqueta se muestran  los mensajes que nos da las excepciones al  no cumplirse una validación o bien al haber un error en la conversión, en este tag se muestran por defecto los mensajes estándares de jsf.

De todo esto difiere el campo de entrada fechaNac, en la cual para la conversión utilizamos el tag jsf core
<f:convertDateTime pattern="dd/MM/yyyy"/></h:inputText>
En este tenemos la posibilidad de especificar mediante el atributo pattern el formato de la fecha.
Olvidamos decir que también difiere el campo de entrada “mail”, en el atributo validator, y no incorporamos el validador estándar de jsf core, el valor del atributo validator  apunta a un método de la clase lista, en este caso al método validaMail,  que es un método personalizado para la validación.
Con esto ya estamos en condiciones de ejecutar nuestro proyecto, iniciamos el servidor y lo ejecutamos


Observamos que se ejecuta,  pero vemos que los mensajes que nos muestran, ya sea el de conversión o el de validación están en ingles, y necesitamos un mensajes mas personalizado. Para ello vamos a crear un archivo de propiedades:
En este caso lo crearemos sobre el paquete predeterminado, click derecho y en nuevo->otro


Elegimos otro y en la zona derecha un archivo de propiedades


Le damos el nombre en este caso error y luego en terminar.


 Ya tenemos nuestro archivo de propiedades creado. A continuación mostramos los distintos mensajes JavaServer Faces estándares que se muestran al usuario debido a errores de conversión y validación en la capa de presentación.

UIInput
Llave (key) Mensaje estándar Mensaje alternativo
javax.faces.component.UIInput.CONVERSION {0}: Conversion error occurred  
javax.faces.component.UIInput.REQUIRED
Ejemplo:Registrar a un usuario en un sitio Web
{0}: Validation Error: Value is required Campo obligatorio
javax.faces.component.UIInput.UPDATE {0}: An error occurred when processing your
submitted information
 

 

Converter
Llave (key) Mensaje estándar Mensaje alternativo
javax.faces.converter.BigDecimalConverter.DECIMAL {2}: ''{0}'' must be a signed
decimal number
Valor ''{0}'' tiene que ser un número decimal
javax.faces.converter.BigIntegerConverter.BIGINTEGER {2}: ''{0}'' must be a number
consisting of one or more digits
Valor "{0}" tiene que ser numérico
javax.faces.converter.BooleanConverter.BOOLEAN {1}: ''{0}'' must be 'true' or 'false'. Valor "{0}" tiene que ser verdadero o falso
javax.faces.converter.ByteConverter.BYTE {2}: ''{0}'' must be a number between 0 and
255
Valor ''{0}'' tiene que ser un número entre 0 y 255
javax.faces.converter.CharacterConverter.CHARACTER {1}: ''{0}'' must be a valid
character
Valor ''{0}'' tiene que ser un caráctervalido
javax.faces.converter.DateTimeConverter.DATE {2}: ''{0}'' could not be understood as a
date
Valor ''{0}'' no se puede interpretar como una fecha
javax.faces.converter.DateTimeConverter.TIME {2}: ''{0}'' could not be understood as a
time
Valor ''{0}'' no se puede interpretar como una hora
javax.faces.converter.DateTimeConverter.DATETIME {2}: ''{0}'' could not be
understood as a date and time
Valor ''{0}'' no se puede interpretar como fecha y hora
javax.faces.converter.DateTimeConverter.PATTERN_TYPE {1}: A 'pattern' or 'type'
attribute must be specified to convert the value ''{0}''
 
javax.faces.converter.DoubleConverter.DOUBLE {2}:''{0}'' must be a number consisting
of one or more digits
Valor "{0}" tiene que ser numérico
javax.faces.converter.EnumConverter.ENUM {2}:''{0}'' must be convertible to an enum  
javax.faces.converter.EnumConverter.ENUM_NO_CLASS {1}:''{0}'' must be
convertible to an enum from the enum, but no enum class provided
 
javax.faces.converter.FloatConverter.FLOAT {2}: ''{0}'' must be a number consisting of
one or more digits
Valor "{0}" tiene que ser numérico
javax.faces.converter.IntegerConverter.INTEGER
Ejemplo:Registrar a un usuario en un sitio Web
{2}:''{0}'' must be a number
consisting of one or more digits
Valor "{0}" tiene que ser numérico
javax.faces.converter.LongConverter.LONG {2}:''{0}'' must be a number consisting of
one or more digits
Valor "{0}" tiene que ser numérico
javax.faces.converter.NumberConverter.CURRENCY {2}:''{0}'' could not be understood
as a currency value
Valor ''{0}'' no se puede interpretar como una moneda
javax.faces.converter.NumberConverter.PERCENT {2}: ''{0}'' could not be understood as
a percentage
Valor ''{0}'' no se puede interpretar como un porcentaje
javax.faces.converter.NumberConverter.NUMBER {2}: ''{0}'' is not a number Valor "{0}" tiene que ser numérico
javax.faces.converter.NumberConverter.PATTERN {2}: ''{0}'' is not a number pattern Valor "{0}" no es un patrón numérico
javax.faces.converter.ShortConverter.SHORT {2}: ''{0}'' must be a number consisting of
one or more digits
Valor "{0}" tiene que ser numérico
javax.faces.converter.STRING {1}: Could not convert ''{0}'' to a string  

 

Validator
Llave (key) Mensaje estándar Mensaje alternativo
javax.faces.validator.DoubleRangeValidator.MAXIMUM {1}: Validation Error: Value is
greater than allowable maximum of ‘’{0}’’
Longitud mayor que el máximo permitido de {0}
javax.faces.validator.DoubleRangeValidator.MINIMUM {1}: Validation Error: Value is
less than allowable minimum of ‘’{0}’’
Longitud menor que el mínimo permitido de {0}
javax.faces.validator.DoubleRangeValidator.NOT_IN_RANGE {2}: Validation Error:
Specified attribute is not between the expected values of {0} and {1}
Valor no se encuentra entre {0} y {1}
javax.faces.validator.DoubleRangeValidator.TYPE {0}: Validation Error: Value is not of
the correct type
 
javax.faces.validator.LengthValidator.MAXIMUM {1}: Validation Error: Value is
greater than allowable maximum of ‘’{0}’’
Longitud mayor que el máximo permitido de {0}
javax.faces.validator.LengthValidator.MINIMUM
Ejemplo:Registrar a un usuario en un sitio Web
{1}: Validation Error: Value is less
than allowable minimum of ‘’{0}’’
Longitud menor que el mínimo permitido de {0}
javax.faces.validator.LongRangeValidator.MAXIMUM {1}: Validation Error: Value is
greater than allowable maximum of ‘’{0}’’
Longitud mayor que el máximo permitido de {0}
javax.faces.validator.LongRangeValidator.MINIMUM {1}: Validation Error Value is
less than allowable minimum of ‘’{0}’’
Longitud menor que el mínimo permitido de {0}
javax.faces.validator.LongRangeValidator.NOT_IN_RANGE {2}: Validation Error:
Specified attribute is not between the expected values of {0} and {1}
Valor no se encuentra entre {0} y {1}
javax.faces.validator.LongRangeValidator.TYPE {0}: Validation Error: Value is not of
the correct type
 



 En el archivo de propiedades indicaremos la clave con su correspondiente valor. Nuestro archivo error.propiertes queda de la siguiente manera

javax.faces.component.UIInput.REQUIRED="Campo obligatorio"
javax.faces.validator.DoubleRangeValidator.MAXIMUM =  El valor debe ser inferior a "{0}"
javax.faces.validator.DoubleRangeValidator.MINIMUM =  El valor debe ser superior a "{0}"
javax.faces.validator.DoubleRangeValidator.NOT_IN_RANGE = El valor no se encuentra en el rango entre {0} y {1}.
javax.faces.validator.DoubleRangeValidator.TYPE = El valor no es del tipo correcto
javax.faces.validator.LengthValidator.MAXIMUM =El valor debe ser inferior a "{0}" caracteres
javax.faces.validator.LengthValidator.MINIMUM = El valor debe ser superior a "{0}" caracteres
javax.faces.validator.LongRangeValidator.MAXIMUM = El valor debe ser inferior a ''{0}''
javax.faces.validator.LongRangeValidator.MINIMUM = El valor debe ser superior a ''{0}''
javax.faces.validator.LongRangeValidator.NOT_IN_RANGE = El valor no se encuentra en el rango entre {0} y {1}.
javax.faces.validator.LongRangeValidator.TYPE = El valor no es del tipo correcto.
javax.faces.converter.DateTimeConverter.DATE = ''{0}'' No es un formato valido de fecha, ejemplo 22/02/1986.
javax.faces.converter.DoubleConverter.DOUBLE = ''{0}'' No es un numero decimal válido.
javax.faces.converter.IntegerConverter.INTEGER = ''{0}'' No numero entero valido.

 


Bien ahora hay qye reflejar ese archivo en nuestro faceconfig.xml, que queda de la siguiente manera

  1. <?xml version='1.0' encoding='UTF-8'?>
  2. <!-- =========== FULL CONFIGURATION FILE ================================== -->
  3. <faces-config version="2.0"
  4.    xmlns="http://java.sun.com/xml/ns/javaee"
  5.    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  6.    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
  7. <managed-bean>
  8.   <managed-bean-class>Lista</managed-bean-class>
  9.   <managed-bean-name>lista</managed-bean-name>
  10.   <managed-bean-scope>session</managed-bean-scope>
  11. </managed-bean>
  12. <application>
  13.   <message-bundle>error</message-bundle>
  14. </application>
  15. </faces-config>

Las lineas de azul son las nuevas, en ella indicamos que los mensajes estaran en un archivo llamado error que se encuentra en el paquete prederminado

Nuestro proyecto de archivos queda de la siguiente manera


Bien ahora ya estamos en condiciones de ejecutar nuevamente nuestro proyecto, con los mensajes de conversión y validación personalizados.

Presionamos el boton agregar sin rellenar ningun campo

Nos muestra el mensaje de campo vacio (required="true")

Verificamos una conversion

Insertamos en sector y sueldo letras y nos muestra el mensaje de error personalizado.

Verificamos una validacion

En este caso ingresamos un mail invalido, y fecha de nacimiento invalida

Bien observamos que todo salio bien, ahora lo completamos de manera correcta y observamos que se agrega a la tabla

 

Bueno, ya tenemos na tabla en la cual, agregamos, modificamos y eliminamos filas de uan datatablea, ahora tambien validamos los datos antes de porder agregarlos a  la tabla.

En el proximo post que sera muy pronto le aplicaremos un poco de estilo pra que quede bonita, asi terminamos con este sencillo post, hasta pronto.SI DESEAN EL PROYECTO PUEDE SER SUBIDO SOLO PIDANLO..si les sirvio comenten no cuesta nada

Visto 2267 veces

Deja un comentario

Asegúrate de llenar la información requerida marcada con (*). No está permitido el código HTML. Tu dirección de correo NO será publicada.