Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于Spring注释的表单验证_Java_Spring_Validation_Spring Mvc_Annotations - Fatal编程技术网

Java 基于Spring注释的表单验证

Java 基于Spring注释的表单验证,java,spring,validation,spring-mvc,annotations,Java,Spring,Validation,Spring Mvc,Annotations,我正在使用基于Springs注释的表单验证(主要是@NotBlank和@Length),这非常有效。我将formbean传递到验证方法中,如下所示: validate(formBean, result); private EntriesBean entries; 我有几个附加到各种表单字段的注释,除了一个之外,这些注释都按照预期进行了验证 表单bean中我的一个字段声明如下: validate(formBean, result); private EntriesBean entries;

我正在使用基于Springs注释的表单验证(主要是@NotBlank和@Length),这非常有效。我将formbean传递到验证方法中,如下所示:

validate(formBean, result);
private EntriesBean entries;
我有几个附加到各种表单字段的注释,除了一个之外,这些注释都按照预期进行了验证

表单bean中我的一个字段声明如下:

validate(formBean, result);
private EntriesBean entries;
这个字段显然是指一个具有常用getter和setter的bean。这个bean中的几个字段也附加了验证注释,但它们不像其他字段那样作为validate()方法调用的一部分进行验证。这与从另一个bean而不是直接从调用validate()的方法引用这个bean有关吗

谢谢

您可以通过以下方式验证“条目”字段:

@Valid
private EntriesBean entries;

这将使Hibernate验证器级联该bean中的验证

回答了我自己的问题

通过阅读非常冗长的文档,我可以看到这样做的方法是使用BindingResult对象的pushNestedPath()和popNestedPath()方法,如下所示:

    result.pushNestedPath("entries");
    validator.validate(form.getEntries(), result);
    result.popNestedPath();

我不喜欢这种方式,因为它看起来很凌乱,但它可以工作,它似乎

这与pushNestedPath的方式相比如何?其中一个比另一个更“最佳实践”吗?我不确定Spring如何使用这些方法进行验证,我给你的方法是与HibernateValidator一起使用的,我不确定它是否适用于你的方法。我想会的,因为@Valid是javax.validation包中的标准注释。您可能会看到,我尝试使用javax库中的@Valid,但它没有触发嵌套bean上的验证注释。我坚持使用我目前的方法,因为我找不到一个使用Spring的其他方法的例子。