@@ -160,12 +160,14 @@ public class DataBinder implements PropertyEditorRegistry, TypeConverter {
160160
161161 private String [] requiredFields ;
162162
163+ private ConversionService conversionService ;
164+
165+ private MessageCodesResolver messageCodesResolver ;
166+
163167 private BindingErrorProcessor bindingErrorProcessor = new DefaultBindingErrorProcessor ();
164168
165169 private final List <Validator > validators = new ArrayList <Validator >();
166170
167- private ConversionService conversionService ;
168-
169171
170172 /**
171173 * Create a new DataBinder instance, with default object name.
@@ -271,9 +273,14 @@ public void initBeanPropertyAccess() {
271273 protected AbstractPropertyBindingResult createBeanPropertyBindingResult () {
272274 BeanPropertyBindingResult result = new BeanPropertyBindingResult (getTarget (),
273275 getObjectName (), isAutoGrowNestedPaths (), getAutoGrowCollectionLimit ());
276+
274277 if (this .conversionService != null ) {
275278 result .initConversion (this .conversionService );
276279 }
280+ if (this .messageCodesResolver != null ) {
281+ result .setMessageCodesResolver (this .messageCodesResolver );
282+ }
283+
277284 return result ;
278285 }
279286
@@ -297,9 +304,14 @@ public void initDirectFieldAccess() {
297304 protected AbstractPropertyBindingResult createDirectFieldBindingResult () {
298305 DirectFieldBindingResult result = new DirectFieldBindingResult (getTarget (),
299306 getObjectName (), isAutoGrowNestedPaths ());
307+
300308 if (this .conversionService != null ) {
301309 result .initConversion (this .conversionService );
302310 }
311+ if (this .messageCodesResolver != null ) {
312+ result .setMessageCodesResolver (this .messageCodesResolver );
313+ }
314+
303315 return result ;
304316 }
305317
@@ -494,7 +506,11 @@ public String[] getRequiredFields() {
494506 * property editor to a new value for a field.
495507 * <p>Default is "true", exposing previous field values to custom editors.
496508 * Turn this to "false" to avoid side effects caused by getters.
509+ * @deprecated as of Spring 4.3.5, in favor of customizing this in
510+ * {@link #createBeanPropertyBindingResult()} or
511+ * {@link #createDirectFieldBindingResult()} itself
497512 */
513+ @ Deprecated
498514 public void setExtractOldValueForEditor (boolean extractOldValueForEditor ) {
499515 getPropertyAccessor ().setExtractOldValueForEditor (extractOldValueForEditor );
500516 }
@@ -507,7 +523,11 @@ public void setExtractOldValueForEditor(boolean extractOldValueForEditor) {
507523 * @see DefaultMessageCodesResolver
508524 */
509525 public void setMessageCodesResolver (MessageCodesResolver messageCodesResolver ) {
510- getInternalBindingResult ().setMessageCodesResolver (messageCodesResolver );
526+ Assert .state (this .messageCodesResolver == null , "DataBinder is already initialized with MessageCodesResolver" );
527+ this .messageCodesResolver = messageCodesResolver ;
528+ if (this .bindingResult != null && messageCodesResolver != null ) {
529+ this .bindingResult .setMessageCodesResolver (messageCodesResolver );
530+ }
511531 }
512532
513533 /**
0 commit comments