代码之家  ›  专栏  ›  技术社区  ›  David Sykes

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

gwt
  •  6
  • David Sykes  · 技术社区  · 16 年前

    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"
    

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

    但这是行不通的。

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

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

    3 回复  |  直到 5 年前
        1
  •  2
  •   blwy10    16 年前

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

    http://gwtreflection.sourceforge.net/

    希望这有帮助!

        2
  •  0
  •   Joao Pereira    15 年前

    检查此解决方案:

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

    希望有帮助。

        3
  •  0
  •   Lucas A.    13 年前

    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);
    }
    
    推荐文章