From ca060cea423807219814c64627d8d87899507241 Mon Sep 17 00:00:00 2001 From: Keith Donald Date: Mon, 27 Jul 2009 12:36:16 +0000 Subject: [PATCH] binder support --- ...AbstractBinder.java => BinderSupport.java} | 14 +++-------- .../model/binder/support/GenericBinder.java | 24 ++++++------------- .../ui/support/PresentationModelBinder.java | 5 ++-- 3 files changed, 13 insertions(+), 30 deletions(-) rename org.springframework.context/src/main/java/org/springframework/model/binder/support/{AbstractBinder.java => BinderSupport.java} (82%) diff --git a/org.springframework.context/src/main/java/org/springframework/model/binder/support/AbstractBinder.java b/org.springframework.context/src/main/java/org/springframework/model/binder/support/BinderSupport.java similarity index 82% rename from org.springframework.context/src/main/java/org/springframework/model/binder/support/AbstractBinder.java rename to org.springframework.context/src/main/java/org/springframework/model/binder/support/BinderSupport.java index 2388d269e0..bfc0d1876e 100644 --- a/org.springframework.context/src/main/java/org/springframework/model/binder/support/AbstractBinder.java +++ b/org.springframework.context/src/main/java/org/springframework/model/binder/support/BinderSupport.java @@ -15,32 +15,26 @@ */ package org.springframework.model.binder.support; -import java.util.Map; - import org.springframework.context.MessageSource; -import org.springframework.model.binder.Binder; import org.springframework.model.binder.BindingResult; -import org.springframework.model.binder.BindingResults; import org.springframework.model.binder.MissingFieldException; import org.springframework.util.Assert; /** - * Base Binder implementation that defines common structural elements. - * Subclasses should parameterized & implement {@link #bind(Map, Object)}. + * Binder implementation support class that defines common structural elements. * @author Keith Donald * @since 3.0 * @see #setRequiredFields(String[]) * @see #setMessageSource(MessageSource) * @see #createBindTemplate() - * @see #bind(Map, Object) */ -public abstract class AbstractBinder implements Binder { +public abstract class BinderSupport { private BindTemplate bindTemplate; private MessageSource messageSource; - public AbstractBinder() { + public BinderSupport() { bindTemplate = createBindTemplate(); } @@ -62,8 +56,6 @@ public abstract class AbstractBinder implements Binder { this.messageSource = messageSource; } - public abstract BindingResults bind(Map fieldValues, M model); - // subclass hooks /** diff --git a/org.springframework.context/src/main/java/org/springframework/model/binder/support/GenericBinder.java b/org.springframework.context/src/main/java/org/springframework/model/binder/support/GenericBinder.java index 1a08ece85c..9dc27d7c91 100644 --- a/org.springframework.context/src/main/java/org/springframework/model/binder/support/GenericBinder.java +++ b/org.springframework.context/src/main/java/org/springframework/model/binder/support/GenericBinder.java @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.springframework.model.binder.support; import java.util.Map; @@ -36,26 +35,22 @@ import org.springframework.model.binder.BindingResults; * A {@link Binder} implementation that accepts any target object and uses * Spring's Expression Language support to evaluate the keys in the field * value Map. - * * @author Mark Fisher * @since 3.0 */ -public class GenericBinder extends AbstractBinder { +public class GenericBinder extends BinderSupport implements Binder { private final ExpressionParser parser = new SpelExpressionParser( - SpelExpressionParserConfiguration.CreateObjectIfAttemptToReferenceNull | - SpelExpressionParserConfiguration.GrowListsOnIndexBeyondSize); - + SpelExpressionParserConfiguration.CreateObjectIfAttemptToReferenceNull + | SpelExpressionParserConfiguration.GrowListsOnIndexBeyondSize); - @Override public BindingResults bind(Map fieldValues, Object model) { StandardEvaluationContext evaluationContext = new StandardEvaluationContext(); evaluationContext.setRootObject(model); - FieldBinder fieldBinder = new EvaluationContextFieldBinder(this.parser, evaluationContext); - return this.getBindTemplate().bind(fieldValues, fieldBinder); + FieldBinder fieldBinder = new EvaluationContextFieldBinder(parser, evaluationContext); + return getBindTemplate().bind(fieldValues, fieldBinder); } - private static class EvaluationContextFieldBinder implements FieldBinder { private final ExpressionParser parser; @@ -73,18 +68,15 @@ public class GenericBinder extends AbstractBinder { Expression e = this.parser.parseExpression(key); e.setValue(this.context, value); alert = new BindSuccessAlert(); - } - catch (ParseException e) { + } catch (ParseException e) { alert = new ParseFailureAlert(e); - } - catch (EvaluationException e) { + } catch (EvaluationException e) { alert = new EvaluationFailureAlert(e); } return new AlertBindingResult(key, value, alert); } } - private static class BindSuccessAlert implements Alert { public String getCode() { @@ -100,7 +92,6 @@ public class GenericBinder extends AbstractBinder { } } - private static class ParseFailureAlert implements Alert { private final ParseException exception; @@ -122,7 +113,6 @@ public class GenericBinder extends AbstractBinder { } } - private static class EvaluationFailureAlert implements Alert { private final EvaluationException exception; diff --git a/org.springframework.context/src/main/java/org/springframework/model/ui/support/PresentationModelBinder.java b/org.springframework.context/src/main/java/org/springframework/model/ui/support/PresentationModelBinder.java index e644e3c3a0..da9e6b2f6f 100644 --- a/org.springframework.context/src/main/java/org/springframework/model/ui/support/PresentationModelBinder.java +++ b/org.springframework.context/src/main/java/org/springframework/model/ui/support/PresentationModelBinder.java @@ -18,10 +18,11 @@ package org.springframework.model.ui.support; import java.util.Map; import org.springframework.context.MessageSource; +import org.springframework.model.binder.Binder; import org.springframework.model.binder.BindingResult; import org.springframework.model.binder.BindingResults; -import org.springframework.model.binder.support.AbstractBinder; import org.springframework.model.binder.support.AlertBindingResult; +import org.springframework.model.binder.support.BinderSupport; import org.springframework.model.binder.support.FieldBinder; import org.springframework.model.binder.support.FieldNotEditableResult; import org.springframework.model.binder.support.FieldNotFoundResult; @@ -38,7 +39,7 @@ import org.springframework.model.ui.PresentationModel; * @see #setRequiredFields(String[]) * @see #bind(Map, PresentationModel) */ -public class PresentationModelBinder extends AbstractBinder { +public class PresentationModelBinder extends BinderSupport implements Binder { public BindingResults bind(Map fieldValues, PresentationModel model) { fieldValues = filter(fieldValues, model); -- GitLab