Dans mon application Spring 3 MVC, les utilisateurs doivent enregistrer un mot de passe et ce serait une fonctionnalité intéressante si elles ont également pu confirmer le mot de passe lors de l'enregistrement. P>
Dans le haricon, j'utilise une validation basée sur l'annotation. Existe-t-il un validateur d'annotation disponible pour effectuer cette vérification? p>
Après que certaines Googleing, j'ai trouvé ce blog: http: //gochev.blogspot .COM / 2010/06 / Spring-MVC-Spring-Spring-Bean-Validation.html . Mais je suppose que je manque un jar-lib ici comme Eclipse est incapable de trouver / suggérer des pots. Quelqu'un sache ce que Jar j'ai besoin de cela pour travailler? P>
Merci d'avance :) p>
3 Réponses :
Vous avez besoin de la validation Hibernate et du JSR 303 API JAR.
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>4.1.0.Final</version> </dependency> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.0.0.GA</version> </dependency>
Voir cette question: Validation de champ croisée avec hibernate Validateur (JSR 303) P>
Il existe plusieurs façons de traiter ce problème. P> p>
J'ai écrit ce qui suit afin de valider les mots de passe:
implémentation de contrainte: p> mon objet DTO: p> package com.test.web.controllers;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
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.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import com.test.logic.dto.UserDto;
@Controller
public final class SignupController {
@Autowired
private Validator validator;
@RequestMapping(value = "/signup.html", method = RequestMethod.POST)
public @ResponseBody
ModelAndView handleSignupForm(@ModelAttribute UserDto candidate,
HttpServletResponse response) throws ServiceException {
Set<ConstraintViolation<UserDto>> failures = validator
.validate(candidate);
if (!failures.isEmpty()) {
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
return ValidationHelper.validationMessages(failures);
} else {
return userService.create(candidate);
}
}
Solution acceptée donnée par Cyril Deba a également travaillé pour moi aussi. Mais ensuite, j'ai dû faire une autre annotation pour Resetpassword et ChangePassword Page, car ils ont une DTO différente. Surmonter que j'ai changé Isvalid vers le code ci-dessous. Bien que cela puisse être acheté en mettant en œuvre une interface aussi, mais je pense que celui-ci est plus réaliste. J'espère que cela aidera.
@Override public boolean isValid(Object candidate, ConstraintValidatorContext context) { try { Method methodGetPassword = candidate.getClass().getMethod("getPassword"); Method methodGetConfirmpassword = candidate.getClass().getMethod("getConfirmpassword"); if(methodGetPassword.invoke(candidate) == null && methodGetConfirmpassword.invoke(candidate)==null) return true; else if(methodGetPassword.invoke(candidate) == null ) return false; return methodGetPassword.invoke(candidate).equals(methodGetConfirmpassword.invoke(candidate)); } catch (NoSuchMethodException ex) { ex.printStackTrace(); return false; } catch (Exception ex) { ex.printStackTrace(); return false; } }