【发布时间】:2015-08-02 21:09:54
【问题描述】:
我在 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
}
约束检查下拉框中的选定值是否已更改。如果该值仍然是“请选择”,则会触发验证错误。这很好用,但对于我的表单,我想根据屏幕上的条件跳过一些框。
就像标准的 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
}
以下行是我得到编译错误的地方:Invalid MemberValuePairs
@DropDown("Please Select", groups ={displayedgroups.class})
谢谢
http://docs.jboss.org/hibernate/validator/4.3/reference/en-US/html_single/
【问题讨论】:
-
准确定义“不起作用”。包括您收到的任何错误消息,包括预期行为与实际行为。
-
我得到一个编译错误。 "赋值的左边必须是变量"
-
发布您的真实代码、您收到的完整且准确的错误消息,并告诉我们此消息所指代码的哪一行。
-
除了模型类之外,我在问题中发布的代码是我的确切代码。我会用真实的模型更新问题。
-
publib Modelname{不能是您的确切代码。并且缺少最重要的部分:您收到的完整且准确的错误消息,以及该消息引用的代码行。
标签: validation spring-mvc annotations