2010-11-23 13 views
2

J'ai un problème simple. Je dois attraper lorsqu'un utilisateur entre une chaîne vide dans un formulaire et affiche le message d'erreur approprié. J'essaie avec l'attribut requis jsf, mais si l'utilisateur entre "" une chaîne comme celle-ci, la validation se poursuit sans erreur. J'ai essayé Spring annotation @NotNull et Hibernate @NotEmpty, mais rien ne résout le problème. Une idée?Chaîne vide avec problème d'ébauche multiple dans JSF - SPRING - HIBERNATE

Répondre

2

Je ne suis pas sûr de la partie du printemps, mais Hibernate vous pouvez utiliser @NotBlank annotation pour cela:

@NotBlank 
private String value; 

Ou, vous pouvez créer un convertisseur de JSF pour String.class qui fait le travail:

package com.example; 

import javax.faces.component.EditableValueHolder; 
import javax.faces.component.UIComponent; 
import javax.faces.context.FacesContext; 
import javax.faces.convert.Converter; 
import javax.faces.convert.FacesConverter; 

@FacesConverter(forClass=String.class) 
public class EmptyToNullConverter implements Converter { 

    public Object getAsObject(FacesContext facesContext, UIComponent component, String value) { 
     if (value == null || value.trim().isEmpty()) { 
      if (component instanceof EditableValueHolder) { 
       ((EditableValueHolder) component).setSubmittedValue(null); 
      } 
      return null; 
     } 
     return value; 
    } 

    public String getAsString(FacesContext facesContext, UIComponent component, Object value) { 
     return (value == null) ? null : value.toString(); 
    } 

} 
+0

Ok, la dernière solution fonctionne bien. Pour @NotBlank je ne peux pas le faire car la seule annotation que je dois utiliser est @NotEmpty. Peut-être parce que j'utilise Hibernate 3.2.5? –

+0

De rien. Il est en effet introduit dans les versions ultérieures d'Hibernate. – BalusC

+0

Ok, alors que si je veux utiliser l'annotation Spring, il n'y a pas de solution? Cependant pour votre dernière solution si je suis déjà un convertisseur, je dois fusionner le code? ou il y a une solution qui me permet d'utiliser 2 convertisseur? –