validateregex validadores validador validacion solo obligatorios numeros mensajes formularios campos validation jsf message

validation - validacion - validadores java



Mensaje validador JSF personalizado para un solo campo de entrada (1)

Me gustaría tener diferentes mensajes de validación para cada validador para diferentes campos de entrada.

¿Es posible en JSF tener un mensaje de validación diferente para un único validador (por ejemplo, <f:validateLongRange> ) para cada campo de entrada?


Hay varias formas:

  1. El más fácil, simplemente establece el atributo validatorMessage .

    <h:inputText ... validatorMessage="Please enter a number between 0 and 42"> <f:validateLongRange minimum="0" maximum="42" /> </h:inputText>

    Sin embargo, esto también se usa cuando usa otros validadores. No estoy seguro si eso formaría un problema entonces. Si es así, dirígete a las siguientes maneras.

  2. Cree un validador personalizado que amplíe el validador estándar, como LongRangeValidator en su caso, capture ValidatorException y vuelva a lanzarlo con el mensaje personalizado deseado. P.ej

    <h:inputText ...> <f:validator validatorId="myLongRangeValidator" /> <f:attribute name="longRangeValidatorMessage" value="Please enter a number between 0 and 42" /> </h:inputText>

    con

    public class MyLongRangeValidator extends LongRangeValidator { public void validate(FacesContext context, UIComponent component, Object convertedValue) throws ValidatorException { setMinimum(0); // If necessary, obtain as custom attribute as well. setMaximum(42); // If necessary, obtain as custom attribute as well. try { super.validate(context, component, convertedValue); } catch (ValidatorException e) { String message = (String) component.getAttributes().get("longRangeValidatorMessage"); throw new ValidatorException(new FacesMessage(message)); } } }

  3. Use OmniFaces <o:validator> que permite configurar un mensaje de validación diferente por validador:

    <h:inputText ...> <o:validator validatorId="javax.faces.Required" message="Please fill out this field" /> <o:validator validatorId="javax.faces.LongRange" minimum="0" maximum="42" message="Please enter a number between 0 and 42" /> </h:inputText>

Ver también: