SORU
22 EYLÜL 2012, CUMARTESİ


Spring MVC tür dönüştürme : ya Dönüştürücü PropertyEditor?

Bağlama ve Spring MVC verileri dönüştürmek için en kolay ve en basit yolu arıyorum. Mümkünse, herhangi bir xml yapılandırma yapmadan.

Şimdiye kadar böyle PropertyEditors kullanıyorum :

public class CategoryEditor extends PropertyEditorSupport {

    // Converts a String to a Category (when submitting form)
    @Override
    public void setAsText(String text) {
        Category c = new Category(text);
        this.setValue(c);
    }

    // Converts a Category to a String (when displaying form)
    @Override
    public String getAsText() {
        Category c = (Category) this.getValue();
        return c.getName();
    }

}

ve

...
public class MyController {

    @InitBinder
    public void initBinder(WebDataBinder binder) {
        binder.registerCustomEditor(Category.class, new CategoryEditor());
    }

    ...

}

Basit : her iki dönüşüm aynı sınıfta tanımlanan ve bağlama basittir. Eğer genel bir bağlama yapmak için tüm denetleyicileri arasında isteseydim, hala 3 lines in my xml config ekleyebilirim.


Ama Bahar 3.x, Converters kullanarak yapmak için yeni bir yol sunuyor :

Bahar bir kap içinde, bu sistemin bir alternatif olarak kullanılabilir PropertyEditors

Hadi olduğundan Dönüştürücüleri kullanmak istiyorum ki "son alternatif". Yaratmak isterdimikidönüştürücüler :

public class StringToCategory implements Converter<String, Category> {

    @Override
    public Category convert(String source) {
        Category c = new Category(source);
        return c;
    }

}

public class CategoryToString implements Converter<Category, String> {

    @Override
    public String convert(Category source) {
        return source.getName();
    }

}

İlk dezavantajı :İki sınıf açmak zorunda kalıyorum. Faydası : genericity sayesinde oyuncular gerek.

Nasıl sadece veri dönüştürücüleri bağlamak mı ?

İkinci dezavantajı :Bir denetleyicisi bunu yapmak için herhangi bir basit bir yolu (açıklamalar veya diğer programlama imkanları) bulamadım: someSpringObject.registerCustomConverter(...); gibi bir şey.

Ben buldum tek yolu sıkıcı ve basit olurdu, ve sadece genel kontrol çapraz etmektedir

  • XML config :

    <bean id="conversionService"
      class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <list>
                <bean class="somepackage.StringToCategory"/>
                <bean class="somepackage.CategoryToString"/>
            </list>
        </property>
    </bean>
    
  • Java config (sadece Bahar 3.1) :

    @EnableWebMvc
    @Configuration
    public class WebConfig extends WebMvcConfigurerAdapter {
    
        @Override
        protected void addFormatters(FormatterRegistry registry) {
            registry.addConverter(new StringToCategory());
            registry.addConverter(new CategoryToString());
        }
    
    }
    

Dönüştürücüler kullanarak neden tüm bu olumsuzlukların,? Bir şey mi kaçırdım ? Farkında olmadığım başka numaralar da var mı ?

PropertyEditors kullanarak gitmek için büyük bir istek var ki... Bağlama çok daha kolay ve daha hızlıdır.

CEVAP
22 EYLÜL 2012, CUMARTESİ


Dönüştürücüler kullanarak neden tüm bu olumsuzlukların,? Kaçırdım bir şey ? Farkında olmadığım başka numaralar da var mı ?

Hayır, çok kapsamlı, her bir İlan ve tescil nasıl hem PropertyEditor ve Dönüştürücü tarif var sanırım.

Aklımda, PropertyEditors kapsamı sınırlıdır - bir türü için bir Dize dönüştürmek yardımcı olur, ve bu dize genellikle UI geliyor, ve bir PropertyEditor İnitBinder @kullanarak ve WebDataBinder kullanarak kayıt olması mantıklı.

Diğer taraftan dönüştürücü UI ilgili dönüşümler için sistemde HERHANGİ bir dönüşüm için değil sadece tasarlanmıştır daha genel, (hedef türü için String). Örneğin, Bahar Entegrasyon kapsamlı bir dönüştürücü bir mesajı istediğiniz bir tür yük dönüştürmek için kullanır.

PropertyEditors hala özellikle belirli bir komut özelliği için özel bir şey yapmak için gereken yere bir durum için uygun UI ilgili aktığı için sanırım. Diğer durumlarda, Bahar referans tavsiyesi almak ve bir dönüştürücü yerine örneğin, bir örnek olarak bir varlık ki kimliği dönüştürmek için () yazmak istiyorum.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jeremy Gallman

    Jeremy Gallm

    11 NİSAN 2012
  • Kat Krazy

    Kat Krazy

    12 Kasım 2010
  • TechRax

    TechRax

    21 EYLÜL 2009