2014-12-09 2 views
0

Я прочитал несколько сообщений и попытался реализовать то же самое, но почему-то я становлюсь ниже ошибки. Я хочу реализовать через XML based configuration.String Empty To Null - Empty Form Fields to null - Spring Editor - StringTrimmerEditor

Два пути

Аннотация Based - отлично работает

@ControllerAdvice 
@Controller 
public class AppBindingInitializer { 

    @InitBinder 
    public void initBinder(WebDataBinder binder) { 
     binder.registerCustomEditor(String.class, new StringTrimmerEditor(true)); 
    } 

} 

XML Based - Получение ошибки

<bean id="coreCustomEditors" class="org.springframework.beans.factory.config.CustomEditorConfigurer"> 
    <property name="customEditors"> 
     <map> 
      <entry key="java.lang.String"> 
       <bean class="org.springframework.beans.propertyeditors.StringTrimmerEditor"> 
        <constructor-arg name="emptyAsNull" value="true" /> 
       </bean> 
      </entry> 
     </map> 
    </property> 
</bean> 

Исключение

Caused by: org.springframework.beans.TypeMismatchException: Failed to convert property value of type 'java.util.LinkedHashMap' to required type 'java.util.Map' for property 'customEditors'; nested exc 
eption is java.lang.IllegalArgumentException: Cannot convert value of type [org.springframework.beans.propertyeditors.StringTrimmerEditor] to required type [java.lang.Class] for property 'customEditor 
s[java.lang.String]': PropertyEditor [org.springframework.beans.propertyeditors.ClassEditor] returned inappropriate value of type [org.springframework.beans.propertyeditors.StringTrimmerEditor] 
     at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:479) 
     at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:511) 
     at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:505) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1502) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1461) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1197) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537) 
     ... 53 more 
Caused by: java.lang.IllegalArgumentException: Cannot convert value of type [org.springframework.beans.propertyeditors.StringTrimmerEditor] to required type [java.lang.Class] for property 'customEdito 
rs[java.lang.String]': PropertyEditor [org.springframework.beans.propertyeditors.ClassEditor] returned inappropriate value of type [org.springframework.beans.propertyeditors.StringTrimmerEditor] 
     at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:263) 
     at org.springframework.beans.TypeConverterDelegate.convertToTypedMap(TypeConverterDelegate.java:623) 
     at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:208) 
     at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:459) 

ответ

0

Вы должны указать имя класса в качестве значения, а не боб (как указано в сообщении), как это:

<bean id="coreCustomEditors" class="org.springframework.beans.factory.config.CustomEditorConfigurer"> 
    <property name="customEditors"> 
     <map> 
      <entry key="java.lang.String" value="your.package.EmptyAsNullStringTrimmerEditor"/> 
     </map> 
    </property> 
</bean> 

с EmptyAsNullStringTrimmerEditor существо:

package your.package; 

public class EmptyAsNullStringTrimmerEditor extends StringTrimmerEditor { 
    public YourClass() { super(true); } 
} 

см CustomEditorConfigurer javadoc

+0

Как передать '' –

+0

Во втором варианте, как он идентифицирует, какой редактор для какого типа типа данных, в отличие от i n первый параметр мы предоставляем 'key as java.lanag.String 'и значения как его редактор –

+0

Извините, что я неправильно читал документ, вы должны подклассы здесь, см. мое редактирование –