2012-04-02 60 views
1

在我在每個控制器這樣的時刻,我需要它:彈簧3註冊一個屬性編輯曾經爲整個應用程序

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

但是這將我的字符串變量,以國家工作正常,有沒有辦法,我可以註冊這與所有控制器?

+2

問題是重複的http://stackoverflow.com/questions/1268021/how-can-i-register-a-global-custom-editor-in-spring-mvc – C0deAttack 2012-04-02 15:00:02

回答

0

你可以把它放在控制器的超類中嗎?

+0

只有當我使用一個countryService每個他們。通過在超級控制器中注入countryService – NimChimpsky 2012-04-02 15:18:30

1

根據需要在表示層,所以它使用您可以聲明在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> 

這樣,只要需要與「Sophisticated」類相關的轉換,屬性編輯器將會因爲它已在應用程序上下文中註冊。

通過這種方式,您無需將模型緊縮到需要進行此類轉換的事實。

希望它有幫助!

3

註冊自定義屬性編輯器一次爲整個應用程序重寫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()); 
    } 

    // ... 
} 

,使你自己的,它實現格式化接口,這樣的事情

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; 
} 

}

這是日期格式類它。

相關問題