提交 34357d2b 编写于 作者: J Juergen Hoeller

revised DefaultBindingErrorProcessor to use direct getPropertyName() and...

revised DefaultBindingErrorProcessor to use direct getPropertyName() and getValue() calls on PropertyAccessException itself (SPR-6111)
上级 9f19e5e7
/*
* Copyright 2002-2007 the original author or authors.
* Copyright 2002-2009 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.
......@@ -55,11 +55,25 @@ public abstract class PropertyAccessException extends BeansException implements
/**
* Return the PropertyChangeEvent that resulted in the problem.
* May be <code>null</code>; only available if an actual bean property
* <p>May be <code>null</code>; only available if an actual bean property
* was affected.
*/
public PropertyChangeEvent getPropertyChangeEvent() {
return this.propertyChangeEvent;
}
/**
* Return the name of the affected property, if available.
*/
public String getPropertyName() {
return (this.propertyChangeEvent != null ? this.propertyChangeEvent.getPropertyName() : null);
}
/**
* Return the affected value that was about to be set, if any.
*/
public Object getValue() {
return (this.propertyChangeEvent != null ? this.propertyChangeEvent.getNewValue() : null);
}
}
/*
* Copyright 2002-2008 the original author or authors.
* Copyright 2002-2009 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.
......@@ -20,6 +20,7 @@ import java.io.PrintStream;
import java.io.PrintWriter;
import org.springframework.util.Assert;
import org.springframework.util.ObjectUtils;
/**
* Combined exception, composed of individual PropertyAccessException instances.
......@@ -60,19 +61,18 @@ public class PropertyBatchUpdateException extends BeansException {
/**
* Return an array of the propertyAccessExceptions stored in this object.
* Will return the empty array (not null) if there were no errors.
* <p>Will return the empty array (not <code>null</code>) if there were no errors.
*/
public final PropertyAccessException[] getPropertyAccessExceptions() {
return this.propertyAccessExceptions;
}
/**
* Return the exception for this field, or <code>null</code> if there isn't one.
* Return the exception for this field, or <code>null</code> if there isn't any.
*/
public PropertyAccessException getPropertyAccessException(String propertyName) {
for (int i = 0; i < this.propertyAccessExceptions.length; i++) {
PropertyAccessException pae = this.propertyAccessExceptions[i];
if (propertyName.equals(pae.getPropertyChangeEvent().getPropertyName())) {
for (PropertyAccessException pae : this.propertyAccessExceptions) {
if (ObjectUtils.nullSafeEquals(propertyName, pae.getPropertyName())) {
return pae;
}
}
......
/*
* Copyright 2002-2008 the original author or authors.
* Copyright 2002-2009 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.
......@@ -94,6 +94,7 @@ public class TypeMismatchException extends PropertyAccessException {
/**
* Return the offending value (may be <code>null</code>)
*/
@Override
public Object getValue() {
return this.value;
}
......
/*
* Copyright 2002-2008 the original author or authors.
* Copyright 2002-2009 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.
......@@ -62,12 +62,11 @@ public class DefaultBindingErrorProcessor implements BindingErrorProcessor {
public void processPropertyAccessException(PropertyAccessException ex, BindingResult bindingResult) {
// Create field error with the exceptions's code, e.g. "typeMismatch".
String field = ex.getPropertyChangeEvent().getPropertyName();
Object value = ex.getPropertyChangeEvent().getNewValue();
String field = ex.getPropertyName();
String[] codes = bindingResult.resolveMessageCodes(ex.getErrorCode(), field);
Object[] arguments = getArgumentsForBindError(bindingResult.getObjectName(), field);
bindingResult.addError(new FieldError(
bindingResult.getObjectName(), field, value, true,
bindingResult.getObjectName(), field, ex.getValue(), true,
codes, arguments, ex.getLocalizedMessage()));
}
......@@ -83,8 +82,7 @@ public class DefaultBindingErrorProcessor implements BindingErrorProcessor {
*/
protected Object[] getArgumentsForBindError(String objectName, String field) {
String[] codes = new String[] {objectName + Errors.NESTED_PATH_SEPARATOR + field, field};
String defaultMessage = field;
return new Object[] {new DefaultMessageSourceResolvable(codes, defaultMessage)};
return new Object[] {new DefaultMessageSourceResolvable(codes, field)};
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册