Использование GWT У меня есть класс Java:Как я могу динамически получить доступ к свойству объекта Java в GWT?
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];
}-*/;
Но это не работает.
special syntax для доступа к объектам Java из JavaScript не может использоваться, поскольку я хочу, чтобы это было динамическим.
Любые идеи о том, как я могу это сделать?
Для полноты, я также хочу иметь возможность устанавливать свойство динамически.
EDIT: ответ blwy10 был отличным советом, чтобы найти меня с использованием «gwt reflection» вместо терминов типа «динамический доступ к свойствам». Это привело меня к gwt-ent, который имеет очень элегантное решение для отражения. Я собираюсь попробовать это, так как он не требует отдельного шага генерации кода.
JS код GWT производит это уменьшенная и затемненный по умолчанию - так что есть хороший шанс, что ваш 'name' собственность становится' xz' в одной компиляции и 'werq' в другом - никак не знать заранее. Вы можете отключить обфускацию, но это приведет к значительно большему JS-файлу. –
ждать. почему отражается Java? –
@ Louis: потому что мы имеем дело с Google Web Toolkit (GWT) - он переводит Java на JavaScript и поддерживает только [подмножество Java Runtime Library] (http://code.google.com/webtoolkit/doc/latest/ RefJreEmulation.html) –