2010-08-26 14 views
6

GWT'yi Kullanma Bir Java sınıfım var:GWT'deki Java nesnesinin özelliğine nasıl dinamik olarak erişebilirim?

public class Pojo { 
    private String name; 
    public String getName() { return name; } 
    public void setName(String name) { this.name = name; } 
} 

Yukarıdaki sınıf, istemci ve sunucu tarafı kodu arasında paylaşılır.

İstemci kodundan, mülke dinamik olarak erişmek istiyorum. Yani, aşağıdaki imza ile bir yöntem yazmak istiyorum:

public String getProperty(Object o, String propertyName) 

Aşağıdaki kod çalışacak şekilde:

Pojo pojo = new Pojo(); 
pojo.setName("Joe"); 
getProperty(pojo, "name"); // this should return "Joe" 

Java yansıması açık bir şekilde ortaya çıkmaktadır. Ve şu JSNI yöntemini denedim:

public static native String getProperty(Object o, String name) /*-{ 
    return o[name]; 
}-*/; 

Ancak bu çalışmaz.

Java nesnelerine JavaScript'ten erişmek için special syntax, bunun dinamik olmasını istediğim gibi kullanılamaz.

Bunu nasıl yapabileceğime dair bir fikriniz var mı?

Tamlık için, bir özelliği dinamik olarak da ayarlayabilmek istiyorum.

DÜZENLEME: blwy10'un cevabı, "dinamik özellik erişimi" gibi terimler yerine "gwt yansımasını" kullanarak arama yapmam için harika bir ipucu oldu. Bu beni çok zarif bir yansıma çözümüne sahip gwt-ent'ya götürür. Ayrı bir kod oluşturma adımı gerektirmediğinden, bunu deneyeceğim.

+0

GWT minified ve varsayılan olarak gizlenmiştir; üretir JS kodu - böylece 'name' özellik bir derleme' xz' olur iyi bir şans var ve Başka bir yerde "werq" - önceden bilmenin yolu yoktur. Gizlemeyi kapatabilirdiniz, ancak bu daha büyük bir JS dosyasına yol açabilir. –

+0

bekleyin. Java neden yansıyor? –

+0

@Louis: Burada Google Web Araç Takımı (GWT) ile uğraşıyoruz - Java'yı JavaScript'e dönüştürüyor ve sadece [Java Runtime Library'nin bir alt kümesini] destekliyor (http://code.google.com/webtoolkit/doc/latest/ RefJreEmulation.html) –

cevap

2

Bu, doğrudan sorunuzu yanıtlamıyor, ancak bunu denediniz mi? Bu yardımcı olur

http://gwtreflection.sourceforge.net/

Umut!

+0

Bahşiş için teşekkürler. Bu bana farklı şartları kullanarak googling var, bu bana şunu getirdi: http://code.google.com/p/gwt-ent/ Bunu daha iyi seviyorum, çünkü ayrı bir kod oluşturma adımı gerektirmez. GWT derleme adımına entegre edilmiştir. –

0

GWT'nin AutoBean Framework'u kullanabilirsiniz. İşte 2 dakikalık çabuk-ve-kirli örnek:

public interface Person {  
    public String getName();  
    public void setName(String name);  
} 


public String getPropertyValue(Person p, String propertyName){ 
    return AutoBeanUtils.getAllProperties(AutoBeanUtils.getAutoBean(p)).get(propertyName); 
} 
İlgili konular