Java 基于Spring注释的表单验证
我正在使用基于Springs注释的表单验证(主要是@NotBlank和@Length),这非常有效。我将formbean传递到验证方法中,如下所示: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;
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的其他方法的例子。