diff --git a/spring-framework-reference/src/validation.xml b/spring-framework-reference/src/validation.xml index dc419210db5..09ffbee493c 100644 --- a/spring-framework-reference/src/validation.xml +++ b/spring-framework-reference/src/validation.xml @@ -1207,82 +1207,83 @@ public interface FormatterRegistry { This applies the Formatter to the field, and overrides any Formatter that would have been applied by field type or annotation. -
- Spring 3 Validation +
+
+ Spring 3 Validation + + Spring 3 introduces several enhancements to its validation support. + First, the JSR-303 Bean Validation API is now fully supported. + Second, when used programatically, Spring's DataBinder can now validate objects as well as bind to them. + Third, Spring MVC now has support for declaratively validating @Controller inputs. + +
+ Overview of the Bean Validation API (JSR-303) - Spring 3 introduces several enhancements to its validation support. - First, the JSR-303 Bean Validation API is now fully supported. - Second, when used programatically, Spring's DataBinder can now validate objects as well as bind to them. - Third, Spring MVC now has support for declaratively validating @Controller inputs. + The Bean Validation API (JSR-303) standardizes validation constraint declaration and metadata for the Java platform. + Using this API, you annotate domain model properties with declarative validation constraints and the runtime enforces them. + There are a number of built-in constraints you can can take advantage of. + You may also define your own custom constraints. - - Overview of the Bean Validation API (JSR-303) - - The Bean Validation API (JSR-303) standardizes validation constraint declaration and metadata for the Java platform. - Using this API, you annotate domain model properties with declarative validation constraints and the runtime enforces them. - There are a number of built-in constraints you can can take advantage of. - You may also define your own custom constraints. - - - To illustrate, consider a simple Person model with two properties: - - + To illustrate, consider a simple Person model with two properties: + + - - - JSR-303 allows you to define declarative validation constraints against such properties: - - + + JSR-303 allows you to define declarative validation constraints against such properties: + + - + + + When this object is processed by a JSR-303 Validator, these constraints will be validated. + + + For general information on JSR-303, see the Bean Validation Specification. + For information on the specific capabilities of the default reference implementation, see the Hibernate Validator documentation. + For how to setup a JSR-303 implementation as a Spring bean, keep reading. + +
+
+ Configuring a Bean Validation Implementation + + Spring provides full support for the JSR-303 Bean Validation API. + This includes convenient support for bootstrapping a JSR-303 implementation as a Spring bean. + This allows a javax.validation.Validator to be injected wherever validation is needed. + + + Use the LocalValidatorFactoryBean to configure a default JSR-303 Validator as a Spring bean: + + ]]> + + + The basic configuration above will trigger JSR-303 to initialize using its default bootstrap mechanism. + The JSR-303 provider, such as Hibernate Validator, will be detected in your classpath automatically. + +
+ Injecting a Validator - When this object is processed by a JSR-303 Validator, these constraints will be validated. + LocalValidatorFactoryBean implements javax.validation.Validator as well as org.springframework.validation.Validator. + Once created, you may inject a reference to either of these interfaces to other beans that need to invoke JSR-303 validation logic. - For general information on JSR-303, see the Bean Validation Specification. - For information on the specific capabilities of the default reference implementation, see the Hibernate Validator documentation. - For how to setup a JSR-303 implementation as a Spring bean, keep reading. + Inject a reference to javax.validation.Validator if you prefer to work with the JSR-303 API directly: -
- - Configuring a Bean Validation Implementation - - Spring provides full support for the JSR-303 Bean Validation API. - This includes convenient support for bootstrapping a JSR-303 implementation as a Spring bean. - This allows a javax.validation.Validator to be injected wherever validation is needed. - - - Use the LocalValidatorFactoryBean to configure a default JSR-303 Validator as a Spring bean: - - -}]]> - - - The basic configuration above will trigger JSR-303 to initialize using its default bootstrap mechanism. - The JSR-303 provider, such as Hibernate Validator, will be detected in your classpath automatically. - -
- Injecting a Validator - - LocalValidatorFactoryBean implements javax.validation.Validator as well as org.springframework.validation.Validator. - Once created, you may inject a reference to either of these interfaces to other beans that need to invoke JSR-303 validation logic. - - - Inject a reference to javax.validation.Validator if you want to work with the JSR-303 API directly: - - - - - Inject a reference to org.springframework.validation.Validator if you prefer to work with the familiar Spring Validation API: - - + + Inject a reference to org.springframework.validation.Validator if you prefer to work with the familiar Spring Validation API: + + - -
-
- Configuring Custom Constraints - - Each JSR-303 validation constraint consists of two parts. - First, a @Constraint annotation that declares the constraint and its configurable properties. - Second, an implementation of the javax.validation.ConstraintValidator interface that implements the constraint's behavior. - To associate a declaration with an implementation, each @Constraint annotation references its corresponding ValidationConstraint implementation class. - At runtime, the ConstraintValidatorFactory then creates instances of this class when the constraint annotation is encountered in your domain model. - - - The LocalValidatorFactoryBean automatically configures a SpringConstraintValidatorFactory that uses Spring to create ConstraintValidator instances. - This allows your custom ConstraintValidators to benefit from dependency injection like any other Spring bean. - - - Below is an example of a custom constraint declaration and implementation that uses Spring dependency injection: - - +
+
+ Configuring Custom Constraints + + Each JSR-303 validation constraint consists of two parts. + First, a @Constraint annotation that declares the constraint and its configurable properties. + Second, an implementation of the javax.validation.ConstraintValidator interface that implements the constraint's behavior. + To associate a declaration with an implementation, each @Constraint annotation references its corresponding ValidationConstraint implementation class. + At runtime, the ConstraintValidatorFactory then creates instances of this class when the constraint annotation is encountered in your domain model. + + + The LocalValidatorFactoryBean automatically configures a SpringConstraintValidatorFactory that uses Spring to create ConstraintValidator instances. + This allows your custom ConstraintValidators to benefit from dependency injection like any other Spring bean. + + + Below is an example of a custom constraint declaration and implementation that uses Spring dependency injection: + + - - + + - -
-
- Additional Configuration Options - - The default LocalValidatorFactoryBean configuration should prove sufficient for most cases. - There are a number of other explicit configuration options for various JSR-303 constructs, from message interpolation to traversal resolution. - See the JavaDocs of LocalValidatorFactoryBean more information on these options. - -
+
- - Configuring a DataBinder +
+ Additional Configuration Options - Since Spring 3, a DataBinder instance can now be configured with a Validator. - Once configured, the Validator may be subsequently invoked by calling binder.validate(). - Any ValidationErrors are automatically added to the binder's BindingResults. + The default LocalValidatorFactoryBean configuration should prove sufficient for most cases. + There are a number of other explicit configuration options for various JSR-303 constructs, from message interpolation to traversal resolution. + See the JavaDocs of LocalValidatorFactoryBean more information on these options. - - When working with the DataBinder programatically, this can be used to invoke validation logic after binding to a target object: - - +
+
+ Configuring a DataBinder + + Since Spring 3, a DataBinder instance can now be configured with a Validator. + Once configured, the Validator may be subsequently invoked by calling binder.validate(). + Any validation Errors are automatically added to the binder's BindingResults. + + + When working with the DataBinder programatically, this feature can be used to invoke validation logic after binding to a target object: + + - -
- - Spring MVC 3 Validation +BindingResults results = binder.getBindingResults();}]]> + +
+
+ Spring MVC 3 Validation + + Spring MVC 3 now has the ability to automatically validate @Controller method arguments after binding. + Before version 3, it was up to the developer to manually invoke object Validation logic. + +
+ Triggering @Controller Method Argument Validation - Spring MVC 3 now has the ability to automatically validate @Controller method arguments after binding. - Before version 3, it was up to the developer to manually invoke object Validation logic. + To trigger validation of a @Controller method argument, simply annotate the argument as @Valid: -
- Triggering @Controller Method Argument Validation - - To trigger validation of a @Controller method argument, simply annotate the argument as @Valid: - - - + + + Spring MVC will validate a @Valid object after binding so-long as an appropriate Validator has been configured. + + - Spring MVC will validate a @Valid object after binding so-long as an appropriate Validator has been configured. + The @Valid annotation is part of the standard JSR-303 Bean Validation API, and not a Spring-specific construct. - - - The @Valid annotation is part of the standard JSR-303 Bean Validation API, and not a Spring-specific construct. - - -
-
- Configuring a Validator for use by Spring MVC - - The Validator instance invoked when a @Valid method argument is encountered may be configured in two ways. - First, you may call binder.setValidator(Validator) within a @Controller's @InitBinder callback method. - This allows you to configure a Validator instance per @Controller class: - - +
+
+ Configuring a Validator for use by Spring MVC + + The Validator instance invoked when a @Valid method argument is encountered may be configured in two ways. + First, you may call binder.setValidator(Validator) within a @Controller's @InitBinder callback method. + This allows you to configure a Validator instance per @Controller class: + + - - - Second, you may call setValidator(Validator) on the global WebBindingInitializer. - This allows you to configure a Validator instance across all @Controllers: - - + + + Second, you may call setValidator(Validator) on the global WebBindingInitializer. + This allows you to configure a Validator instance across all @Controllers: + + @@ -1439,20 +1440,20 @@ public class MyController { ]]> - -
-
- Configuring a JSR-303 Validator for use by Spring MVC - - With JSR-303, the default javax.validation.Validator implementation is quite generic. - A single instance typically coordinates the validation of all application objects that declare validation constraints. - To configure such a Validator for use by Spring MVC, simply inject a LocalValidatorFactoryBean reference into the WebBindingInitializer as shown in the previous section. - LocalValidatorFactoryBean already implements org.springframework.validation.Validation, delegating to the JSR-303 provider underneath. - - - A full configuration example showing injection of a JSR-303 backed Validator into Spring MVC is shown below: - - +
+
+ Configuring a JSR-303 Validator for use by Spring MVC + + With JSR-303, the default javax.validation.Validator implementation is quite generic. + A single instance typically coordinates the validation of all application objects that declare validation constraints. + To configure such a Validator for use by Spring MVC, simply inject a LocalValidatorFactoryBean reference into the WebBindingInitializer as shown in the previous section. + LocalValidatorFactoryBean already implements org.springframework.validation.Validation, delegating to the JSR-303 provider underneath. + + + A full configuration example showing injection of a JSR-303 backed Validator into Spring MVC is shown below: + + @@ -1460,16 +1461,15 @@ public class MyController { - + ]]> - - - With this configuration, anytime a @Valid @Controller method argument is encountered, it will be validated using JSR-303. - -
+ + + With this configuration, anytime a @Valid @Controller method argument is encountered, it will be validated using JSR-303. +