Me referiré a uno de BalusC respuestas:
JSF no apoyar la validación de campo, ¿hay una solución?

Yo siga de la misma manera, y salir con el código de la siguiente manera:

en .xhtml

<h:form id="form1">
  <div>
    <p:messages globalOnly="true" display="text" />

        <h:inputHidden value="true">
            <f:validator validatorId="fooValidator" />
            <f:attribute name="input1" value="#{input1}" />
            <f:attribute name="input2" value="#{input2}" />
            <f:attribute name="input3" value="#{input3}" />
        </h:inputHidden>

        <h:panelGrid columns="3">  
            <h:outputText value="name 1: " />
            <p:inputText binding="#{input1}" id="input11" value="#{testPage.input1}" />
            <p:message for="input11" display="text"/>
        </h:panelGrid>
        <h:panelGrid columns="3">
            <h:outputText value="name 2: " />               
            <p:inputText binding="#{input2}" id="input22" value="#{testPage.input2}" />
            <p:message for="input22" display="text"/>
        </h:panelGrid>
        <h:panelGrid columns="3">
            <h:outputText value="name 3: " />
            <p:inputText binding="#{input3}" id="input33" value="#{testPage.input3}" />
            <p:message for="input33" display="text"/>
        </h:panelGrid>
        <p:commandButton value="Submit" action="#{testPage.submitValidator}" update=":updateBody" />
    </div>

</h:form>

clase java:

@FacesValidator(value="fooValidator")
public class CustomValidator2 implements Validator {

    @Override
    public void validate(FacesContext context, UIComponent component, Object value)
        throws ValidatorException {
    UIInput input1 = (UIInput) component.getAttributes().get("input1");
    UIInput input2 = (UIInput) component.getAttributes().get("input2");
    UIInput input3 = (UIInput) component.getAttributes().get("input3");

    Object value1 = input1.getSubmittedValue();
    Object value2 = input2.getSubmittedValue();
    Object value3 = input3.getSubmittedValue();

    if (value1.toString().isEmpty() && value2.toString().isEmpty() && value3.toString().isEmpty()) {
        String errorMsg = "fill in at least 1";
        FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, errorMsg, errorMsg);
        FacesContext.getCurrentInstance().addMessage("form1:input11", msg);
        //throw new ValidatorException(msg);
    }

    }
}

el código está trabajando bien, pero me enfrento a un problema. Cómo resaltar la frontera de nombre1 inputText(o ambos nombre1 y nombre2 inputText) con el color rojo como normalmente se hace por JSF cuando se produce un error de validación.

imagen como referencia:
http://img443.imageshack.us/img443/8106/errork.jpg

gracias de antemano

InformationsquelleAutor heng heng | 2013-01-17

1 Comentario

  1. 6

    Marca no válida por UIInput#setValid(), pasando false.

    input1.setValid(false);
    input2.setValid(false);
    input3.setValid(false);

    Las fronteras son específicos para PrimeFaces <p:inputText>, por lo que no es necesario añadir CSS repetitivo como se sugiere por el resto de la comunidad.

    Tenga en cuenta que esto también puede lograrse por OmniFaces <o:validateAll> etiqueta sin la necesidad de homegrow un validador personalizado.

    • gracias BalusC de nuevo, que resolvió mi problema 🙂
    • Eres bienvenido.
    • hola @BalusC, cómo utilizar UIInput#setValid() en el botón de enviar método de acción, me puede dar un ejemplo?
    • Usted puede conseguir el físico de entrada de un componente por su ID de cliente desde el punto de vista de la raíz por UIViewRoot#findComponent(). Es, sin embargo, recomendamos realizar el trabajo deseado en un validador.
    • donde escribir el component.setValid(false); código. Estoy tratando de poner en public class EmailValidator implements Validator el método public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException { sin embargo component no tiene setValid método.
    • Estoy usind costura 2.3 y agregar EmailValidation… otros elementos de formulario ha de validación necesarios. Ahora la validación de los mensajes de obras, sin embargo, no hay ningún tipo de resalte para la entrada de los elementos que dan error
    • lo siento, he olvidado decir que, el código es tirar: throw new ValidatorException(message); en realidad, cuando añado correo electrónico validador primer campo de entrada ha sido redline alertó a modo cuando puedo enviar correo no válido direccion. Entonces, de alguna manera, se empieza a parecer normal, ya sea en estado no válido o un documento válido de estado
    • tiene usted razón! He de crear una nueva pregunta: stackoverflow.com/questions/35272053/… Gracias

Dejar respuesta

Please enter your comment!
Please enter your name here