使用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,它有一个非常优雅的反射解决方案。我将尝试这个,因为它不需要单独的代码生成步骤。
答案 0 :(得分:2)
答案 1 :(得分:0)
答案 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);
}