SpringMVC和注释,如何在表单包含不同字段(取决于组合框)的情况下进行验证

SpringMVC和注释,如何在表单包含不同字段(取决于组合框)的情况下进行验证,spring,spring-mvc,annotations,hibernate-validator,Spring,Spring Mvc,Annotations,Hibernate Validator,我正在努力实现以下目标: 我有一个以组合框开头的表单,假设用户必须选择“学生”或“老师” “学生”和“教师”在表单中显示的字段相同,但如果选中“教师”,我将显示更多字段(这些字段首先隐藏,当用户选择“教师”时,我将使用jQuery显示) 问题是,我希望只有在选择“教师”时,这些字段才是必填字段 我不知道该怎么办,我认为不可能使用如下注释: @NotBlank private String teacherCourse; 因为当用户选择“学生”单选按钮时,此字段将始终为空 有什么想法吗?我可以使用

我正在努力实现以下目标:

我有一个以组合框开头的表单,假设用户必须选择“学生”或“老师”

“学生”和“教师”在表单中显示的字段相同,但如果选中“教师”,我将显示更多字段(这些字段首先隐藏,当用户选择“教师”时,我将使用jQuery显示)

问题是,我希望只有在选择“教师”时,这些字段才是必填字段

我不知道该怎么办,我认为不可能使用如下注释:

@NotBlank
private String teacherCourse;
因为当用户选择“学生”单选按钮时,此字段将始终为空


有什么想法吗?我可以使用自定义验证方法吗?如何使用?

您可以使用javascript或JQuery进行前端验证。。。取决于您的组合框值。如果是老师还是学生

function validate(){

 var combox_value = document.getElementbyID("combo_box").value;

     if(combox_value == "Teacher"){
     //Validate for Teacher fields
        var input_text1 = document.getElementbyID("input_text"2).value;
        if(input_text1=="" || input_text1==null){
        alert("Field cannot be empty");
        return false;
        }
        return true;
     }
     else if(combox_value == "Student"){
     //Validate for Student fields
        var input_text2 = document.getElementbyID("input_text2").value;
        if(input_text2=="" || input_text2==null){
        alert("Field cannot be empty");
        return false;
        }
        return true;
     }

}
对于JQuery,请尝试以下链接以获取实时示例…



过去我对此采取了两种方法

在提交时使用枚举字段确定要执行的验证类型。这是灵活的,并允许任何数量的自定义验证方法

另一种方法是使用学生和教师类都扩展的基本命令对象。这允许这两种类型扩展和覆盖验证和字段。这需要使用单独的方法来绑定每个类型。

您可以使用来区分应用于两个实体的约束和仅应用于其中一个实体的约束:

public interface TeacherConstraints {}

@NotBlank(groups=TeacherConstraints.class)
private String teacherCourse;
验证对象时,根据组合框中选择的类型指定要验证的组:

//teacher
Set<ConstraintViolation<Object>> violations = validator.validate(object, TeacherConstraints.class);

//student
Set<ConstraintViolation<Object>> violations = validator.validate(object, Default.class);
//老师
设置冲突=validator.validate(对象,TeacherConstraints.class);
//学生
设置冲突=validator.validate(对象,Default.class);