Pregunta

El problema que tengo es que mi La validación de Bean no funciona como esperaba.

Tengo un Bean administrado con ámbito de sesión con un name campo que está vinculado a un h:inputText.Se debe ingresar el nombre, y tener una longitud mínima de 1 carácter, y una longitud máxima de 5 caracteres.Espero que cuando ingrese el nombre en el cuadro de texto, el bean de respaldo lo valide en consecuencia y, si falla, se mostrarán los mensajes de error correspondientes.

Sin embargo, éste no es el caso. Las validaciones siempre fallan., incluso si ingreso un caso válido en el texto de entrada (p. ej."a B C").Al depurar la aplicación, parece que el getName() Siempre se llama al descriptor de acceso y nunca se llega al establecedor.¿Estoy haciendo algo mal?Supongo que el validador usa el descriptor de acceso para validar, pero el problema es que el configurador nunca tiene la oportunidad de actualizar el valor del nombre...Debo estar perdiendo algo.

A continuación se muestra el Bean administrado:

@ManagedBean
@SessionScoped
public class James implements Serializable {

  public James() {
    super();
   }

  private String name;

  @NotNull
  @Min(value = 1)
  @Max(value = 5)
  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }
}

A continuación se muestra el fragmento del JSF xhtml.Probé algunas variaciones diferentes con formularios separados, pero la primera opción es la que supongo que funciona (creo que es equivalente a la tercera opción, pero lo intenté por si acaso :))

<h:messages/>
<h:form>
  <h:inputText id="jamesName" value="#{james.name}"/>
  <h:message for="jamesName"/>
  <h:commandButton value="submit"/>
</h:form>
<h:form>
  <h:inputText id="jamesName" value="#{james.name}" immediate="true"/>
  <h:message for="jamesName"/>
  <h:commandButton value="submit"/>
</h:form>
<h:form>
  <h:inputText id="jamesName" value="#{james.name}">
    <f:validateBean />
  </h:inputText>
  <h:message for="jamesName"/>
  <h:commandButton value="submit"/>
</h:form>

Estoy usando JSF 2.0.2-FCS con Hibernate Entity Manager 3.3.2.GA e Hibernate Validator 4.0.2.GA (a continuación se muestran las partes relevantes de mi Maven POM), ejecutándolo en Tomcat 6.0.20 en Windows XP Pro Service. Paquete 3 (32 bits).

<dependency>
  <groupId>javax.faces</groupId>
  <artifactId>jsf-api</artifactId>
  <version>2.0.2-FCS</version>
</dependency>
<dependency>
  <groupId>javax.faces</groupId>
  <artifactId>jsf-impl</artifactId>
  <version>2.0.2-FCS</version>
</dependency>
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>jstl</artifactId>
  <version>1.2</version>
</dependency>
<dependency>
  <groupId>javax.servlet.jsp</groupId>
  <artifactId>jsp-api</artifactId>
  <version>2.1</version>
  <scope>provided</scope>
</dependency>
<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-entitymanager</artifactId>
  <version>3.3.2.GA</version>
</dependency>
<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-validator</artifactId>
  <version>4.0.2.GA</version>
</dependency>
¿Fue útil?

Solución

Su validación está funcionando correctamente. El problema es con sus anotaciones @MIN y @max:

@NotNull
@Min(value = 1)
@Max(value = 5)
public String getName() {
    return name;
}

@Min y @Max son para comparación numérica. Usted escribió:

  

debe ser introducido el nombre, y tienen una longitud mínima de 1 carácter, y una longitud máxima de 5 caracteres

Debe utilizar @Size anotación en su lugar, como en:

@NotNull
@Size(min = 1, max = 5)
public String getName() {
    return name;
}

Los campos de frijol no se actualizan porque falla la validación. Sólo después de la validación se realiza correctamente será el grano se actualizan.

Otros consejos

En cuanto a su pregunta adicional - ver esta matriz - no, que no son compatibles.

Sobre la cuestión de JSF -. Compruebe ambos registros de Tomcat y la consola JavaScript Firefox

Con el fin de elevar un error de compilación en este tipo de casos, podemos utilizar procesador de hibernación Validador de anotación. hibernación validador

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top