我在Spring MVC中为验证创建了一些约束,但是我在定义约束的验证组时遇到了问题
以下是我创建的一个约束
的示例约束
public @interface DropDown {
String value();
String message() default"{DropDown}";
Class<?>[] groups() default{};
Class<? extends Payload>[] payload() default{};
}
这是我使用约束创建的验证器类。
验证器
public class DropdownConstraintValidator implements ConstraintValidator<DropDown, String>{
private String annotationSelect;
@Override
public void initialize(DropDown dropdown) {
// TODO Auto-generated method stub
this.annotationSelect = dropdown.value();
}
@Override
public boolean isValid(String selectField, ConstraintValidatorContext cntx) {
// TODO Auto-generated method stub
if(selectField == null){
return false;
}
if(selectField.equals(annotationSelect)){
return false;
}
else
return true;
}
}
在我的一个模型中,这就是我如何使用约束
public Modelname{
@DropDown("Please Select")
private String selection;
//getters --Setters
}
约束检查下拉框中的选定值是否已更改。如果值仍然是&#34;请选择&#34;然后触发验证错误。这很好用,但对于我的表单,我想根据屏幕上的条件跳过一些框。
就像标准的JSR 303验证一样。我想像我这样使用我的约束
public Modelname{
@DropDown("Please Select", groups={displayed.class})
private String selection;
}
我认为,因为我定义了传递给验证器的值,所以应该以相同的方式定义组,但我花了一整天在线搜索,我似乎无法找到任何明确解释如何操作的文档。即使在这个网站上
这就是我在其中一个模型中使用约束的方法。
public class Personalinfo {
private int id;
@DropDown("Please Select", groups ={displayedgroups.class})
private String title;
@NotBlank(message = "Please provide your name", groups ={displayedgroups.class})
private String name;
//rest of the class attributes with getters and setters
}
在以下行中我收到编译错误:无效的MemberValuePairs
@DropDown("Please Select", groups ={displayedgroups.class})
由于
http://docs.jboss.org/hibernate/validator/4.3/reference/en-US/html_single/
答案 0 :(得分:0)
正确的语法与NotBlank示例中使用的语法相同:
@DropDown(message = "Please Select", groups = {displayedgroups.class})
或
@DropDown(value = "Please Select", groups = {displayedgroups.class})
取决于您要填充的属性(值或消息)&#34;请选择&#34;。
如果
,您只能省略属性名称value
和答案 1 :(得分:0)
我找到了解决问题的方法。我必须删除“Class<?>[] groups();
”旁边的“默认{}; ”
public @interface DropDown {
String value();
String message() default"{DropDown}";
Class<?>[] groups();
Class<? extends Payload>[] payload() default{};
}
现在,在模型上,注释将期望您定义属性组。例如。
public Modelname{
@DropDown("Please Select", groups=displayed.class)
private String selection;
//rest of the code here
}