如何在GWT中动态访问Java对象的属性?

时间:2010-08-26 02:09:38

标签: gwt

使用GWT我有一个Java类:

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

上述类在客户端和服务器端代码之间共享。

从客户端代码我想动态访问该属性。也就是说,我想写一个带有以下签名的方法:

public String getProperty(Object o, String propertyName)

以下代码可以使用:

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

Java反射显然已经出来了。我尝试了以下JSNI方法:

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

但这不起作用。

用于从JavaScript访问Java对象的special syntax也不能使用,因为我希望它是动态的。

关于我如何做到这一点的任何想法?

为了完整性,我还希望能够动态设置属性。

编辑:blwy10的答案是一个很好的提示,让我使用“gwt反射”而不是像“动态属性访问”这样的术语。这导致我gwt-ent,它有一个非常优雅的反射解决方案。我将尝试这个,因为它不需要单独的代码生成步骤。

3 个答案:

答案 0 :(得分:2)

这不能直接回答你的问题,但你试过这个吗?

http://gwtreflection.sourceforge.net/

希望这有帮助!

答案 1 :(得分:0)

检查此解决方案:

http://jpereira.eu/2011/01/30/wheres-my-java-reflection/

希望它有所帮助。

答案 2 :(得分:0)

您可以使用GWT的AutoBean Framework。这是一个2分钟快速和肮脏的例子:

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