我想按如下方式使用ValidationUtils。但我无法实例化错误对象,因为错误是一个接口。你能告诉我如何在不使用验证器的情况下使其工作吗?
if(visitorDetails==null)
{
Errors errors;
visitorDetails=new Visitor();
ValidationUtils.rejectIfEmpty(errors, "VisitorInfo", "Selected Visitor Details Not Found");
}
答案 0 :(得分:5)
阅读本文:Validation...
但是,您必须在类中实现Validation接口,而不是使用它来验证您的对象,并且在控制器中自动装配验证器。
这是一个例子:
public class PersonValidator implements Validator {
/**
* This Validator validates *just* Person instances
*/
public boolean supports(Class clazz) {
return Person.class.equals(clazz);
}
public void validate(Object obj, Errors e) {
ValidationUtils.rejectIfEmpty(e, "name", "name.empty");
Person p = (Person) obj;
if (p.getAge() < 0) {
e.rejectValue("age", "negativevalue");
} else if (p.getAge() > 110) {
e.rejectValue("age", "too.darn.old");
}
}
}
并在您的控制器中:
....
@Autowired
private PersonValidator personValidator;
@InitBinder
protected void initBinder(final HttpServletRequest request, final ServletRequestDataBinder binder) {
binder.addValidators(personValidator);
}
...
答案 1 :(得分:0)
当字段为空或者为emptywithspace时,你可以用它来对你的某些字段做一些约束,比如显示错误,这个类已经包含了一些可以做到这一点的静态方法 下面是一个使用ValidationUtils类的例子 公共类UserValidator实现Validator {
public boolean supports(Class clazz) {
// TODO Auto-generated method stub
return Employee.class.equals(clazz);
}
public void validate(Object target, Errors errors) {
// TODO Auto-generated method stub
ValidationUtils.rejectIfEmpty(errors, "email", "email");
ValidationUtils.rejectIfEmpty(errors, "password", "password");
Employee emplo = (Employee) target;
if(emplo.getEmail() != null && emplo.getEmail()=="aa") {
errors.rejectValue("email", "email invalide ");
}
答案 2 :(得分:0)
假设您正在使用Spring Boot。
如果使用application.properties(在project / src / resources下),请在其中添加以下内容:
spring.messages.basename=validation
现在将validation.properties(位于project / src / resources下)并放入以下内容(例如):
NotEmpty=This field is required.
您的模型(在本例中为AppUser)应具有:
private String useremail;
getters/setters;
创建一个这样的组件(类)(示例):
@Component
public class UserAddValidator implements Validator {
@Autowired
private UserService userService;
@Override
public boolean supports(Class<?> aClass) {
return AppUser.class.equals(aClass);
}
@Override
public void validate(Object o, Errors errors) {
AppUser user = (AppUser) o;
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "useremail", "NotEmpty");
}
}
以下内容进入您的控制器:
@RequestMapping(value = "registration", method = RequestMethod.POST)
public String registration(@ModelAttribute("userForm") AppUser userForm, BindingResult bindingResult, Model model) {
useraddValidator.validate(userForm, bindingResult);
if (bindingResult.hasErrors()) {
return "userregistration";
}
userService.save(userForm);
model.addAttribute("success", "User " + userForm.getUsername() + " created successfully");
return "success";
}
最后但并非最不重要的一点,您认为与此类似:
<div class="row">
<label class="col-md-3" for="useremail">Email-ID</label>
<div class="col-md-8">
<spring:bind path="useremail">
<div class="form-group ${status.error ? 'has-error' : ''}">
<form:input type="text" path="useremail" class="form-control"
placeholder="Email-id" autofocus="true"></form:input>
<form:errors path="useremail">${emailerror}</form:errors>
</div>
</spring:bind>
</div>
</div>
结果应如下所示:
您可以查看HERE进行更多验证。
答案 3 :(得分:0)
如果我正确理解了您的问题,则希望获取错误对象。 对于您的情况,我建议采用以下方法。
if(visitorDetails==null)
{
visitorDetails=new Visitor();
Errors errors = new BeanPropertyBindingResult(visitorDetails, visitorDetails.getClass().getName());
ValidationUtils.rejectIfEmpty(errors, "VisitorInfo", "Selected Visitor Details Not Found");
}
让我知道是否需要更多帮助。