@ -12,6 +12,24 @@
<section xml:id= "validation-introduction" >
<section xml:id= "validation-introduction" >
<title > Introduction</title>
<title > Introduction</title>
<sidebar xml:id= "validation-beanvalidation-vs-spring-validation" >
<title > JSR-303 Bean Validation</title>
<para > The Spring Framework supports JSR-303 Bean Validation adapting
it to Spring's <interfacename > Validator</interfacename> interface.</para>
<para > An application can choose to enable JSR-303 Bean Validation once globally,
as described in <xref linkend= "validation-beanvalidation" /> , and use it
exclusively for all validation needs.</para>
<para > An application can also register
additional Spring <interfacename > Validator</interfacename> instances
per <classname > DataBinder</classname> instance, as described in
<xref linkend= "validation-binder" /> . This may be useful for
plugging in validation logic without the use of annotations.</para>
</sidebar>
<para > There are pros and cons for considering validation as business logic,
<para > There are pros and cons for considering validation as business logic,
and Spring offers a design for validation (and data binding) that does not
and Spring offers a design for validation (and data binding) that does not
exclude either one of them. Specifically validation should not be tied to
exclude either one of them. Specifically validation should not be tied to
@ -1778,6 +1796,16 @@ binder.validate();
<lineannotation > // get BindingResult that includes any validation errors</lineannotation>
<lineannotation > // get BindingResult that includes any validation errors</lineannotation>
BindingResult results = binder.getBindingResult();</programlisting>
BindingResult results = binder.getBindingResult();</programlisting>
<para > A DataBinder can also be configured with multiple
<interfacename > Validator</interfacename> instances
via <code > dataBinder.addValidators</code>
and <code > dataBinder.replaceValidators</code> .
This is useful when combining globally configured JSR-303 Bean Validation
with a Spring <interfacename > Validator</interfacename> configured
locally on a DataBinder instance.
See <xref linkend= "validation-mvc-configuring" /> .</para>
</section>
</section>
<section xml:id= "validation-mvc" >
<section xml:id= "validation-mvc" >
@ -1847,6 +1875,20 @@ public class MyController {
<mvc:annotation-driven validator= "globalValidator" />
<mvc:annotation-driven validator= "globalValidator" />
</beans> ]]></programlisting>
</beans> ]]></programlisting>
<para > To combine a global and a local validator, configure the
global validator as shown above and then add a local validator:</para>
<programlisting language= "java" > < ![CDATA[@Controller
public class MyController {
@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.addValidators(new FooValidator());
}
}]]></programlisting>
</section>
</section>
<section xml:id= "validation-mvc-jsr303" >
<section xml:id= "validation-mvc-jsr303" >