Problema para comparar valores null, vacio o "" de un h:inputtext

Buen dia a todos.

Mi problema es el siguiente, tengo varios h:inputtext con la siguiente restriccion, al menos unos de los tres debe ser llenado, entonces estoy haciendo lo siguiente, cree mi propio validador en el cual cargo el contenido del value y compararlo dentro de un if() asi:

public void validate(FacesContext context, UIComponent component, Object value) {

String validador = (String)value;

if (validador.equals("")|| validador.equals(null)|| validador==null) {
FacesMessage message = new FacesMessage();
message.setDetail("Al Menos Llene Una de Estas Opciones");
message.setSummary("Al Menos Llene Una de Estas Opciones");
message.setSeverity(FacesMessage.SEVERITY_ERROR);
throw new ValidatorException(message);

}

el anterior es para un solo h:inputtext..... pero no me renoce el valor VACIO, NULL ó "".... esto lo necesito para saber si se digitó o no dentro de ese campo.

muchas gracias por la colaboracion

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Re: Problema para comparar valores null

Tal vez porque en realidad no has manejado ningún valor nulo, de lo contrario, ya te hubiera salido un horroroso java.lang.NullPointerException. ¿Por qué? Porque la lógica que utilizas está.... mal.

A un nulo no le puedes aplicar una prueba equals. Lee el JavaDoc para equals. Por cierto, si tienes ese problema, también lo tienes al escribir SQL. Vas a sufrir mucho con los nulos si no captas bien su concepto.

En todo caso, primero debes validar que efectivamente no hayas recibido un nulo, y a continuación el resto de las validaciones:

if (validador == null || validador.equals(""))

Saludos

Javier Castañón

Re: comparar valores null, vacio o "" de un h:inputText

Gracias javier por la colaboracion.

Comprendo lo de la comparacion de nulos y el uso del equals(), para dar mas contexto al problema explico lo siguiente:

tengo este bean

public class CampoVacio {

    private String vacio = "";

    public String getVacio() {
        if(vacio.equals(""))
        {System.out.println("verdad");}
        return vacio;
    }

    public void setVacio(String vacio) {
        System.out.println("colocando valor");
        this.vacio = vacio;
    }
}

lo agrego al archivo faces-config.xml

<managed-bean>
        <managed-bean-name>EntidadAdministrativa</managed-bean-name>
        <managed-bean-class>visualWeb.EntidadAdministrativa</managed-bean-class>  --------->ruta del bean
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>

mi validador:

public class MultiValidador implements Validator {

    @Override
    public void validate(FacesContext context, UIComponent component, Object value) {

         String validador =(String)value;
       
        System.out.println("por aca voy");

        if (validador==null || validador.equals("")) {
            FacesMessage message = new FacesMessage();
            message.setDetail("Al Menos Llene Una de Estas Opciones");
            message.setSummary("Al Menos Llene Una de Estas Opciones");
            message.setSeverity(FacesMessage.SEVERITY_ERROR);
            throw new ValidatorException(message);

        }
    }
}

cargarlo tambien al faces-config.xml

<validator>
        <validator-id>MultiValidador</validator-id>
        <validator-class>visualWeb.validacion.MultiValidador</validator-class>
    </validator>

este es uno de los h:inputtext

<h:inputText id="HallazDirecc" maxlength="50" size="40" value="#{vacio.vacio}">
                                    <f:validator validatorId="MultiValidador"/>
                                    </h:inputText>°
                                    <h:message for="HallazDirecc" style="color:blue" />

Al ejecutarlo pasa lo siguiente......... en el bean se ejecuta la funcion get y se cumple el if(vacio.equals("")) y hace la salida por consola, ya estando en la pagina se oprime el boton de enviar sin ingresar nada en el h:inputtext y se deberia ejecutar mi validador en el cual el if (validador==null || validador.equals("")) deberia ejecutarse lo cual este ultimo no lo hace.

Se me hace muy extraño ya que tambien hice el ensayo de habilitar require="true" y en este caso si ejecuta el validador para campos requeridos q trae JSF por defecto....entonces no se en ultimas q tipo de valor tiene o como es reconocido el "" ó vacio de un h:inputtext.

Porfa una colaboracion con esto.

Imagen de mathemathician

Hola

Definitivamente si el bloque del if (validador==null || validador.equals("")) no se ejecuta es porque validador es diferente de null y además no es igual a "". Quiere decir que validador es igual a una cadena no vacía y es a fuerza diferente de null. Escribe la instrucción System.out.println("por aca voy"); mejor como: System.out.println("por aca voy"+validador); para que veas cual es el contenido de validador. El problema se me hace que viene de h:inputtext. Saludos

Re: comparar valores null, vacio o "" de un h:inputText

buen dia.

He estado mirando, modificando y ejecutando el codigo q les enseñe y me he dado cuenta de lo siguiente:

1) - lastimosamente no me ha funcionado.

2) - Que de alguna manera JSF no deja crear un validador para valores de tipo null o "", ya que en mi caso es como si entrara en conflicto con la clase javax.faces.component.UIInput que es la encargada de manejar el validador de campos requeridos por defecto de JSF.......

3)- En conclusion: al querer evaluar value="" con contenido "" ó null de un campo h:inputtext, "obligatoriamente" tocara recurrir bien sea a activar required="true" y q javax.faces.component.UIInput se encargue de validarlo. Otra opcion seria determinar como valor nulo o vacio seria representandolo de otra forma ej: value="vacio" ó value="0"..etc.....y ya con esta cadena de caracteres se podria entrar a mi validador y ejecutar la condicion if ( validador.equals("vacio") || validador.equals("0"))............ esto ultimo no es de mi agrado porq si nulo se representa como null o ="", ¿para que determinar otra manera de representarlo?.

De todas formas esto queda aun abierto a discusion, si alguno ha diseñado un validador para campos con contenido null ó vacio ó = "" y les ha funcionado porfavor comentenme.

Gracias

<o:validateOneOrMore>

 

Tal vez quieras usar <o:validateOneOrMore> si deseas validar que al menos un campo sea llenado.

Aquí y aquí hay un ejemplo de uso. Lo único que necesitas es agregar el JAR de OmniFaces en tu proyecto, agregar el espacio de nombres xmlns:o="http://omnifaces.org/ui" y usarlo.

~~~

Interpretar cadenas vacías como nulas

 

Por cierto, puedes configurar la implementación de JavaServer Faces para que interprete las cadenas vacías como nulas, sólo agrega en el archivo web.xml el siguiente parámetro de contexto:

<context-param>
  <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
  <param-value>true</param-value>
</context-param>

~~~

Probar con: isEmpty()

Hola Andres:
Yo solo he trabajado con Java usando Netbeans, y hasta ahorita solo he hecho pruebas de validación de entradas de texto a un JTextField mediante la funcion isEmpty(). Obtengo lo que se introdujo a un JTextField lo guardo en un String y lo valido con un if de la siguiente manera:

if( exp.isEmpty() || exp.length() < 1){
            JOptionPane.showMessageDialog(null, "Tu_mensaje_de_error", "Error de captura", JOptionPane.ERROR_MESSAGE);
        }

En realidada no hace falta asignarlo a una variable

En realidad no se necesita asignar a una variable para poder evaluarlo:

        JTextField text=new JTextField();
        text.getText().isEmpty();
Imagen de abrahamstalin

El problema esta en el orden

El problema esta en tu if, lo primero que tienes que validar es que no venga null, despues el metodo .trim().isEmpty como una negación (!)

xD

Por fin alguien coherente!