我在SpringMVC中使用以下UserValidator代码。该代码工作正常。但是,我不确定如何将数据库实现验证。
由于它具有数据库连接性,因此应在后台完成,并向用户显示进度条。
因此,考虑到JSP作为视图,我应该如何实现此功能。
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
}
}
}
您可以使用注释您的验证器,@Component
然后自动连接DAO以进行数据库调用。我在我的项目中做了同样的事情。
这是一个例子:
@Component
public class UserValidator implements Validator {
@Autowired
private MyDAO myDAO;
...
}
请记住,您的验证类应仅执行validate。在这里修改数据库中的数据可能不是一个好主意。实际上,如果没有验证错误,您的控制器应指示您的服务类执行此操作。因此,您的控制器将如下所示:-
@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);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句