Question

Le problème que je vais avoir est que mon Bean Validation ne fonctionne pas comme j'attendre .

J'ai une session Scoped Managed Bean avec un champ name qui est lié à un h:inputText. Le nom doit être inscrit et avoir une longueur minimum de 1 caractère, et une longueur maximale de 5 caractères. Je pense que quand je rentre le nom dans la zone de texte, il sera validé en conséquence par le backing bean, et si elle échoue, il afficherait les messages d'erreur correspondant.

Cependant, ce n'est pas le cas. Les validations sont toujours défaillants , même si j'entre un cas valable dans la inputText (par exemple « abc »). Le débogage de l'application, il semble que l'accesseur getName() est toujours appelé, et le poseur est jamais atteint. Est-ce que je fais quelque chose de mal? Je suppose que le validateur utilise l'accesseur pour valider, mais le problème est que le poseur obtient jamais une occasion de mettre à jour la valeur du nom ... Je dois manquer quelque chose.

Ci-dessous le bean géré:

@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;
  }
}

Ci-dessous le fragment du xhtml JSF. J'ai essayé quelques variations différentes avec des formes différentes, mais la première option est celle que je suppose de travailler (je pense qu'il est équivalent à la troisième option, mais essayé juste au cas :))

<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>

J'utilise JSF 2.0.2-FCS avec Hibernate Entity Manager 3.3.2.GA et Hibernate Validator 4.0.2.GA (ci-dessous sont les parties pertinentes de mon Maven POM), en cours d'exécution dans Tomcat 6.0.20 sous Windows XP Pro service pack 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>
Était-ce utile?

La solution

Votre validation fonctionne correctement. Le problème est avec vos annotations @Min et @max:

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

@Min et @Max sont destinés à la comparaison numérique. Vous avez écrit:

  

Le nom doit être inscrit et avoir une longueur minimum de 1 caractère, et une longueur maximale de 5 caractères

Vous devez utiliser à la place @Size annotation, comme dans:

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

Les champs de haricots ne sont pas mis à jour car la validation échoue. Seulement après la validation réussit sera la fève sont mis à jour.

Autres conseils

Quant à votre autre question - voir cette matrice - non, ils ne sont pas compatibles.

A propos de la question JSF -. Vérifiez les deux journaux tomcat et le javascript console firefox

Pour soulever une erreur de compilation dans ce genre de cas, nous pouvons utiliser Processeur Annotation Hibernate Validator. mise en veille prolongée validateur

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top