2013-07-17 5 views
0

У меня есть pojo в моем классе, содержащий некоторые методы манипулирования картами и массивами в java. Этот объект используется в вызовах RPC для переноса моих конфигураций. У меня есть механизм, в котором перед выполнением любого вызова RPC я выполняю функцию javascript. Теперь я действительно хочу передать свой объект конфигурации этой функции javascript, и эта функция javascript может управлять этим объектом конфигурации, и, наконец, этот обработанный объект будет передан в моем вызове RPC.В GWT как мы можем обмениваться объектами между javascript и java?

Так как я могу передать свой java-объект в javascript и разрешить его манипулировать?

+1

Эта ссылка может помочь вам http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html#sharing –

+0

Является эта функция JavaScript представляет собой метод JSNI из вашего проекта GWT или файла стороннего пользователя? – fabfry

ответ

1

Во-первых, вы не можете напрямую манипулировать объектами Java из javascript. Но вы можете экспортировать множество статических методов в javascript и использовать их для управления вашими объектами. Это делается таким образом:

public void onModuleLoad() { 
    exportHelloMethod(this); 
} 
public String exportedMethod(String name) { 
    // Manipulate your java classes here 
    // return something to JS 
} 
// Create a reference in the browser to the static java method 
private native void exportHelloMethod(HelloClass instance) /*-{ 
    $wnd.hello = [email protected][...]HelloClass::exportedMethod(Ljava/lang/String;); 
}-*/; 

К счастью, есть библиотека, которая позволяет экспортировать Java классы и методы более простым способом. Это gwt-exporter, и вы должны просто реализовать Exportable в своем классе и использовать набор аннотаций, чтобы генератор-экспортер выполнял всю работу.

@ExportPackage("jsc") 
@Export 
public class MyClass implements Exportable { 
    public void show(String s){ 
    } 
} 

public void onModuleLoad() { 
    ExporterUtil.exportAll(); 
} 

Тогда в JavaScript можно манипулировать и создании экземпляра класса:

var myclass = new jsc.MyClass(); 
myclass.show('whatever'); 
+0

Должен ли экспортируемый объект возникнуть в javascript? Потому что если нет, то это не то, что он спрашивает (и у меня есть аналогичная проблема). – rjcarr

+0

Экспортируемый метод/класс закодирован в java так же, как вы делаете что-то в gwt, но экспортируя его в javascript, означает, что вы можете инициализировать java-классы из javascript или вызывать java-методы из javascript. Это то, что вы просите? –

+0

Мое понимание - плакат хочет создавать объекты в java-коде, а затем манипулировать ими в javascript. В ваших примерах не описывается то, что вы говорите «вы можете инициировать (sic) java-классы из javascript», что прямо противоположно этому. Мне интересно, потому что я хочу также создавать объекты в java и манипулировать ими в javascript, но не могу понять, как это сделать. Я разместил этот вопрос, но не получил никакой обратной связи, вы можете помочь? http://stackoverflow.com/questions/20709611/can-java-objects-be-accessed-from-javascript-in-gwt – rjcarr