2016-06-08 1 views
0

J'essaye de valider l'email de Spring Bean contenant mais ni le validateur ni BindingResult ne montrent aucune erreur quand l'email dans la demande Bean vient comme chaîne vide. S'il vous plaît, consultez le code suivant:Pourquoi Spring BindingResult ou le validateur ne montrent aucune erreur?

Bean:

import org.springframework.context.annotation.Scope; 
import org.springframework.stereotype.Component; 
import org.springmodules.validation.bean.conf.loader.annotation.handler.Email; 
import org.springmodules.validation.bean.conf.loader.annotation.handler.NotEmpty; 

@Component("grouponRedemptionFormBean") 
@Scope("prototype") 
public class GrouponRedemptionBean { 

@NotEmpty(message = "Please enter your email addresss.") 
@Email(message = "Please correct your email.") 
private String email; 
    … 
} 

Controller:

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.validation.Valid; 

import org.apache.log4j.Logger; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.beans.factory.annotation.Qualifier; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.validation.BeanPropertyBindingResult; 
import org.springframework.validation.BindingResult; 
import org.springframework.validation.Errors; 
import org.springframework.validation.Validator; 
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.RequestParam; 


@Controller 
public class GrouponVoucherRedemptionController { 

@Autowired 
@Qualifier("defaultBeanValidator") 
private Validator validator; 

@RequestMapping(value="/groupon-redemption.ep", method=RequestMethod.POST) 
public String PostGrouponRedemption(@Valid @ModelAttribute GrouponRedemptionBean grouponRedemptionBean, BindingResult bindingResult, 
HttpServletRequest request, HttpServletResponse response, Model model){ 

    Errors errors = new BeanPropertyBindingResult(grouponRedemptionBean, "grouponRedemptionFormBean"); 
    validator.validate(grouponRedemptionBean, errors); 
    if(errors.hasErrors()) { 
     bindingResult.addAllErrors(errors); 
    } 
    if (bindingResult.hasErrors()) { 
     return GROUPON_REDEMPTION_VIEW; 
    }  
... 

configuration XML:

<mvc:annotation-driven /> 

Répondre

2

Vous avez mauvais ordre argument - BindingResult doit être immédiatement après l'objet du modèle (GrouponRedemptionBean dans votre cas). Voir les documentation:

Les paramètres Errors ou BindingResult doivent suivre l'objet modèle qui est lié immédiatement la signature de la méthode pourrait avoir plus d'un objet de modèle et le printemps va créer une BindingResult séparée par exemple pour chacun d'eux si l'exemple suivant ne fonctionnera pas:

Ordre non valide de BindingResult et @ModelAttribute.

@RequestMapping(method = RequestMethod.POST) 
public String processSubmit(@ModelAttribute("pet") Pet pet, Model model, BindingResult result) { ... } 

Notez qu'il ya un paramètre Model entre Pet et BindingResult. Pour obtenir cela, vous devez travailler réorganiser les paramètres comme suit:

@RequestMapping(method = RequestMethod.POST) 
public String processSubmit(@ModelAttribute("pet") Pet pet, BindingResult result, Model model) { ... } 
+1

j'ai changé l'emplacement de BindingResult et a ajouté Validator - le résultat est le même –

+0

Est-ce que d'autres dans votre travail de validation de projet? – Roman

+0

Que voulez-vous dire? –