2014-01-19 43 views
1

我在SpringMVC中使用以下UserValidator代码。代码工作正常。但是,我不确定我将如何实施数据库验证。Spring MVC和显示验证过程中

因为,它与数据库的连接,它应该在后台完成,并向用户展示一个进度条。

那么,我应该如何实现这个功能,将JSP视为一个View。

package core; 

    import org.springframework.validation.Errors; 
    import org.springframework.validation.ValidationUtils; 
    import org.springframework.validation.Validator; 

    public class UserValidator implements Validator { 

     @Override 
     public boolean supports(Class arg0) { 
      // TODO Auto-generated method stub 
      return User.class.isAssignableFrom(arg0); 
     } 

     @Override 
     public void validate(Object arg0, Errors errors) { 
      // TODO Auto-generated method stub 
      ValidationUtils.rejectIfEmpty(errors, "UserName", "message.userName"); 
      ValidationUtils.rejectIfEmpty(errors, "password", "message.password"); 
      ValidationUtils.rejectIfEmpty(errors, "repassword", "message.reenterpassword"); 

      User user=(User)arg0; 
      if(!errors.hasErrors() && !(user.getPassword().equals(user.getRepassword()))){ 
       errors.rejectValue("repassword", "message.passwordDifferent"); 
      }else{ 
       //Connect to database, validate for duplicate username and insert into DataBase if required 
} 
     } 

    } 

回答

0

您可以@Component注解你验证,然后自动装配你的DAO做数据库调用。我对我的项目做了同样的事情。

下面是一个例子: -

@Component 
public class UserValidator implements Validator { 

    @Autowired 
    private MyDAO myDAO; 

    ... 

} 

请记住,您的验证类应该只执行验证。这里修改数据库中的数据可能不是一个好主意。事实上,如果没有验证错误,你的控制器应该指示你的服务类来这样做。所以,你的控制器将是这个样子: -

@Controller 
@RequestMapping(value = "/login") 
public class LoginController { 

    @Autowired 
    private UserService userService; 

    @RequestMapping(method = RequestMethod.POST) 
    public ResponseEntity login(@Valid @ModelAttribute LoginForm loginForm, BindingResult result, Model model) { 

     if (result.hasErrors()) { 
      return new ResponseEntity(HttpStatus.BAD_REQUEST); 
     } 

     // save to DB here 
     userService.saveUsernameIfNotDuplicate(...); 

     return new ResponseEntity(HttpStatus.OK); 
    } 
} 
+0

能否请你添加一个小例子,这将真正帮助我 – andyPaul

+0

见更新的帖子。 – limc

+0

但是,在哪里可以添加代码以显示“进行中的验证”。 saveUsernameIfNotDuplicate应在后台执行。 – andyPaul