Defer decision on BindingResult type until access

Closes gh-24347
This commit is contained in:
Rossen Stoyanchev
2020-05-13 17:24:31 +01:00
parent fe3b36af68
commit 6403a9f10e
2 changed files with 17 additions and 5 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -129,6 +129,8 @@ public class DataBinder implements PropertyEditorRegistry, TypeConverter {
@Nullable
private AbstractPropertyBindingResult bindingResult;
private boolean directFieldAccess = false;
@Nullable
private SimpleTypeConverter typeConverter;
@@ -249,7 +251,7 @@ public class DataBinder implements PropertyEditorRegistry, TypeConverter {
public void initBeanPropertyAccess() {
Assert.state(this.bindingResult == null,
"DataBinder is already initialized - call initBeanPropertyAccess before other configuration methods");
this.bindingResult = createBeanPropertyBindingResult();
this.directFieldAccess = false;
}
/**
@@ -280,7 +282,7 @@ public class DataBinder implements PropertyEditorRegistry, TypeConverter {
public void initDirectFieldAccess() {
Assert.state(this.bindingResult == null,
"DataBinder is already initialized - call initDirectFieldAccess before other configuration methods");
this.bindingResult = createDirectFieldBindingResult();
this.directFieldAccess = true;
}
/**
@@ -308,7 +310,8 @@ public class DataBinder implements PropertyEditorRegistry, TypeConverter {
*/
protected AbstractPropertyBindingResult getInternalBindingResult() {
if (this.bindingResult == null) {
initBeanPropertyAccess();
this.bindingResult = (this.directFieldAccess ?
createDirectFieldBindingResult(): createBeanPropertyBindingResult());
}
return this.bindingResult;
}