Spring 3 регистрация свойства редактора один раз для всего приложения - PullRequest
1 голос
/ 02 апреля 2012

В данный момент я делаю это на каждом контроллере, который мне нужен:

 @InitBinder
 protected void initBinder(WebDataBinder binder){
   binder.registerCustomEditor(
     Country.class, new CountryPropertyEditor(this.countryService));
 }

Что отлично работает при преобразовании моей строковой переменной в страну, но есть ли способ зарегистрировать это на всех контроллерах?

Ответы [ 3 ]

3 голосов
/ 02 октября 2013

Чтобы зарегистрировать редактор пользовательских свойств один раз для переопределения всего приложения addFormatters метод WebMvcConfigurerAdapter в вашем классе конфигурации.

Пример для даты (с настройкой Java)

@EnableWebMvc
@Configuration
public class WebConfiguration extends WebMvcConfigurerAdapter {

    // ...

    @Override
    public void addFormatters( final FormatterRegistry registry ) {
        registry.addFormatterForFieldType( java.sql.Date.class, new DateFormatter() );
    }

    // ... 
}

и создайте свой собственный класс для форматирования даты, который реализует интерфейс Formatter , что-то вроде этого

public final class DateFormatter implements Formatter<java.sql.Date> {

    private String pattern;

    public DateFormatter() {
        this( "yyyy-MM-dd" );
    }

    public DateFormatter( final String pattern ) {
        this.pattern = pattern;
    }

    public String print( final java.sql.Date date, final Locale locale ) {
        if ( date == null ) {
            return "";
        }
        return getDateFormat( locale ).format( date );
    }

    public java.sql.Date parse( final String formatted, final Locale locale ) throws
        ParseException {
        if ( formatted.length() == 0 ) {
            return null;
    }
    java.util.Date udDate = getDateFormat( locale ).parse( formatted );
    return new java.sql.Date( udDate.getTime() );
}

protected DateFormat getDateFormat( final Locale locale ) {
    DateFormat dateFormat = new SimpleDateFormat( this.pattern, locale );
    dateFormat.setLenient( false );
    return dateFormat;
}

}

Вот и все.

1 голос
/ 15 декабря 2012

Вы можете декларативно зарегистрировать редакторы свойств в файле конфигурации xml, чтобы он использовался по мере необходимости на уровне представления:

Сначала зарегистрируйте класс, используемый для преобразования:

<bean id="sample" class="youpackages.SophisticatedClass">
    <property name="type" value="sophisticatedClass"/>
</bean>

Затем зарегистрируйте это глобально в приложении:

<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
  <property name="customEditors">
    <map>
      <entry key="youpackages.SophisticatedClass" value="yourpackages.SophisticatedClassEditor"/>
    </map>
  </property>
</bean>

Таким образом, как только потребуется преобразование, относящееся к классу «Сложный», редактор свойств будет использоваться так, как он был зарегистрирован в контексте приложения.

Таким образом, вам не нужно привязывать свою модель к факту, что эти преобразования необходимы.

Надеюсь, это поможет!

0 голосов
/ 02 апреля 2012

Можете ли вы просто поместить его в суперкласс ваших контроллеров?

...