【问题标题】:How to validate single property of a bean at one time in Spring MVC using custom validator?如何使用自定义验证器在 Spring MVC 中一次验证 bean 的单个属性?
【发布时间】:2014-09-24 09:39:24
【问题描述】:

一旦用户输入他的电子邮件,我需要通过电子邮件发送忘记密码链接,该电子邮件应该只经过验证。我只有一个 POJO 具有属性电子邮件、密码、确认密码。

同样,当用户点击发送的链接时,会显示一个输入密码和确认密码的表单,现在只需验证这两个属性。我只有一个自定义验证器来执行该验证。

那么有什么办法可以做到吗?以下是我的代码

User.java

public class User {

private String name;
private String password;
private String confirmPassword;
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}
public String getConfirmPassword() {
    return confirmPassword;
}
public void setConfirmPassword(String confirmPassword) {
    this.confirmPassword = confirmPassword;
}

MyController.javasn-p

@RequestMapping(value="/forgot", method=RequestMethod.POST)
public ModelAndView forgotPasswordSubmit(@Valid @ModelAttribute("User")  User,BindingResults result, user,HttpServletRequest request) {

    ModelAndView model = new ModelAndView("pwd/forgot/index");
    // to check user information has any error
 if(results.hasErrors())
        return model;
    model.addObject(user);
    boolean check = service.validate(user);
    if (check == true)
        return model;
    String status = service.sendPasswordResetLink(accountId, user, request);
    if (status.equals("success")) {
        return new ModelAndView("pwd/forgot-res/index");

    }

    return model;
}

当用户点击请求发送时

@RequestMapping(value="/reset", method=RequestMethod.POST)
public ModelAndView resetPasswordSubmit(@ModelAttribute("linkId") String linkId,
    @Valid @ModelAttribute("user")User user,BindingResult results,HttpServletRequest request) {

    String view = "pwd/reset-success/index";
    if(results.hasErrors())
        return model;
    String status=  this.service.updateUserPassword(linkId,user.getPassword(),user.getConfirmPassword(),request);
    if(!status.equals("success"))
        return new ModelAndView("pwd/reset-failed/index");
    //if Reset Failed
      // view = "pwd/reset-failed/index";

    ModelAndView model = new ModelAndView(view);


    return model;
}

【问题讨论】:

  • 这行不通!!你向我们展示了你为此做了什么。你失败的地方。你不能通过说I have a urgent requirement..来分配任务。

标签: java spring validation spring-mvc


【解决方案1】:

链接后的密码和确认密码表单应如下所示。

<form>
    Password : <input type="password" name="password"/>
    Confirm Password : <input type="password" name="confirmPassword"/>
    <input type="hidden" name="email" value="N/A"/>
    <input type="submit" value="Submit"/>
</form>

您的验证器应如下所示,您可以在其中检查 email 属性以获取您发送的隐藏值。如果匹配,则您知道您在电子邮件中单击链接后的表单中。如果不是,那就是之前的形式。在此基础上,您可以进行验证。

public class UserValidator implements Validator
{

    @Override
    public boolean supports(Class<?> clazz)
    {
        return User.class.equals(clazz);
    }

    @Override
    public void validate(Object target, Errors errors)
    {
        User user = (User) target;
        if (user.getEmail().equals("N/A")) {
            // Password Reset Form Validation (Password, Confirm Password)
        } else {
            // Password Reset Request Form Validation (Email, Password, Confirm Password)
        }
    }
}

【讨论】:

  • 我正在使用 springs 标签来显示表单,而 没有提供任何值属性来设置值
猜你喜欢
  • 2014-09-24
  • 2013-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多