提交 5f9f6995 编写于 作者: J Juergen Hoeller

refined PropertyEditor exposure for the ConversionService case

上级 0057481a
...@@ -117,9 +117,8 @@ public abstract class AbstractPropertyBindingResult extends AbstractBindingResul ...@@ -117,9 +117,8 @@ public abstract class AbstractPropertyBindingResult extends AbstractBindingResul
if (this.conversionService != null) { if (this.conversionService != null) {
// Try custom formatter... // Try custom formatter...
TypeDescriptor fieldDesc = getPropertyAccessor().getPropertyTypeDescriptor(fixedField); TypeDescriptor fieldDesc = getPropertyAccessor().getPropertyTypeDescriptor(fixedField);
TypeDescriptor stringDesc = TypeDescriptor.valueOf(String.class); if (fieldDesc != null && this.conversionService.canConvert(fieldDesc, TypeDescriptor.STRING)) {
if (fieldDesc != null && this.conversionService.canConvert(fieldDesc, stringDesc)) { return this.conversionService.convert(value, fieldDesc, TypeDescriptor.STRING);
return this.conversionService.convert(value, fieldDesc, stringDesc);
} }
} }
return value; return value;
...@@ -153,7 +152,9 @@ public abstract class AbstractPropertyBindingResult extends AbstractBindingResul ...@@ -153,7 +152,9 @@ public abstract class AbstractPropertyBindingResult extends AbstractBindingResul
TypeDescriptor td = (field != null ? TypeDescriptor td = (field != null ?
getPropertyAccessor().getPropertyTypeDescriptor(fixedField(field)) : getPropertyAccessor().getPropertyTypeDescriptor(fixedField(field)) :
TypeDescriptor.valueOf(valueType)); TypeDescriptor.valueOf(valueType));
editor = new ConvertingPropertyEditorAdapter(this.conversionService, td); if (this.conversionService.canConvert(TypeDescriptor.STRING, td)) {
editor = new ConvertingPropertyEditorAdapter(this.conversionService, td);
}
} }
return editor; return editor;
} }
......
...@@ -31,12 +31,12 @@ import org.springframework.util.Assert; ...@@ -31,12 +31,12 @@ import org.springframework.util.Assert;
*/ */
public class ConvertingPropertyEditorAdapter extends PropertyEditorSupport { public class ConvertingPropertyEditorAdapter extends PropertyEditorSupport {
private static final TypeDescriptor stringDescriptor = TypeDescriptor.valueOf(String.class);
private final ConversionService conversionService; private final ConversionService conversionService;
private final TypeDescriptor targetDescriptor; private final TypeDescriptor targetDescriptor;
private final boolean canConvertToString;
/** /**
* Create a new ConvertingPropertyEditorAdapter for a given * Create a new ConvertingPropertyEditorAdapter for a given
...@@ -50,17 +50,23 @@ public class ConvertingPropertyEditorAdapter extends PropertyEditorSupport { ...@@ -50,17 +50,23 @@ public class ConvertingPropertyEditorAdapter extends PropertyEditorSupport {
Assert.notNull(targetDescriptor, "TypeDescriptor must not be null"); Assert.notNull(targetDescriptor, "TypeDescriptor must not be null");
this.conversionService = conversionService; this.conversionService = conversionService;
this.targetDescriptor = targetDescriptor; this.targetDescriptor = targetDescriptor;
this.canConvertToString = conversionService.canConvert(this.targetDescriptor, TypeDescriptor.STRING);
} }
@Override @Override
public void setAsText(String text) throws IllegalArgumentException { public void setAsText(String text) throws IllegalArgumentException {
setValue(this.conversionService.convert(text, stringDescriptor, this.targetDescriptor)); setValue(this.conversionService.convert(text, TypeDescriptor.STRING, this.targetDescriptor));
} }
@Override @Override
public String getAsText() { public String getAsText() {
return (String) this.conversionService.convert(getValue(), this.targetDescriptor, stringDescriptor); if (this.canConvertToString) {
return (String) this.conversionService.convert(getValue(), this.targetDescriptor, TypeDescriptor.STRING);
}
else {
return null;
}
} }
} }
/* /*
* 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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -59,16 +59,16 @@ abstract class ValueFormatter { ...@@ -59,16 +59,16 @@ abstract class ValueFormatter {
if (propertyEditor != null && !(value instanceof String)) { if (propertyEditor != null && !(value instanceof String)) {
try { try {
propertyEditor.setValue(value); propertyEditor.setValue(value);
return getDisplayString(propertyEditor.getAsText(), htmlEscape); String text = propertyEditor.getAsText();
if (text != null) {
return getDisplayString(text, htmlEscape);
}
} }
catch (Throwable ex) { catch (Throwable ex) {
// The PropertyEditor might not support this value... pass through. // The PropertyEditor might not support this value... pass through.
return getDisplayString(value, htmlEscape);
} }
} }
else { return getDisplayString(value, htmlEscape);
return getDisplayString(value, htmlEscape);
}
} }
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册