Java Spring MVC表单验证/访问验证程序中的表单字段
有一个表单,它的电话号码有时是必需的,有时不是必需的,该表单由spring调用的验证程序类验证。我想让验证器类知道这个字段何时是必需的,如果它是空的,什么时候可以,但是我不确定实现这个字段的正确方法。控制器和验证过程如下所示:Java Spring MVC表单验证/访问验证程序中的表单字段,java,forms,spring,spring-mvc,Java,Forms,Spring,Spring Mvc,有一个表单,它的电话号码有时是必需的,有时不是必需的,该表单由spring调用的验证程序类验证。我想让验证器类知道这个字段何时是必需的,如果它是空的,什么时候可以,但是我不确定实现这个字段的正确方法。控制器和验证过程如下所示: @RequestMapping(value = "my/url", method = RequestMethod.POST) public ModelAndView someMethod(@Valid T myForm, BindingResult bindingResu
@RequestMapping(value = "my/url", method = RequestMethod.POST)
public ModelAndView someMethod(@Valid T myForm, BindingResult bindingResult) {
//Calling the validation...
if (bindingResult.hasErrors()) {
// didn't pass validation
} else {
// is ok!
}
}
表单看起来像这样。isI可以添加另一个字段来确定是否需要电话号码,如果我以后在验证电话字段时能找到使用它的方法。它有@Phone注释:
public class MyForm implements Serializable {
private static final long serialVersionUID = 1L;
@Phone
private String phone;
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
@Phone注释指定将验证数据的类
@Target({CONSTRUCTOR, FIELD, METHOD, PARAMETER})
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = ValidateField.class)
public @interface Phone {
String message() default "{default.phone.errormsg}";
int maxLength() default 64;
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
@Target({CONSTRUCTOR,FIELD,METHOD,PARAMETER})
@保留(运行时)
@记录
@约束(validatedBy=ValidateField.class)
公共@接口电话{
字符串消息()默认值“{default.phone.errormsg}”;
int maxLength()默认值为64;
类[]组()默认值{};
实际上,这不是关于Spring的,而是关于JSR-303,又名.Bean验证。在约束验证器中不可能访问父Bean的其他字段(据我所知)。相反,您需要定义Bean级别的约束,它包含Desired逻辑。
public class PhoneValidator implements ConstraintValidator<Phone, String> {
//...
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
// I want to check if the "required" field was passed from form here
// to know if it's ok for the field to be empty
if (StringUtils.isEmpty(value) /* && isNotRequired */) {
return true;
}
return notBlank(value, context)
&& maxLength(value, context, maxLength) /* and other constraints... */;
}
//...
}