10
votes

Spring 3 Validation basée sur l'annotation: mot de passe et confirmez le mot de passe

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.

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?

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?

Merci d'avance :)


0 commentaires

3 Réponses :


3
votes

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>


0 commentaires

10
votes

J'ai écrit ce qui suit afin de valider les mots de passe:

implémentation de contrainte: p> xxx pré>

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


0 commentaires

0
votes

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


0 commentaires