1

Java から JSNI (生成された gwt-exporter) を介して Java オブジェクトを Java に渡すのに苦労しており、だれかが助けてくれるかどうか疑問に思っています。

Java ("Person") でオブジェクトを作成し、それを gwt-exporter ("CommonService.displayPerson") で公開された Java メソッドを呼び出す JSNI メソッド ("displayPerson") に渡します。ただし、最終ステージまでのパラメーターは null になります。

String を渡すと問題なく動作します。それは私が問題にぶつかった私のオブジェクトだけです。

Person は、他の GWT アプリケーションによって継承された GWT アプリケーション JAR で定義されます。

ご覧いただきありがとうございます。

マイク

GWT アプリケーション

package com.anstis.pluginserver.client;

import com.anstis.plugincommon.shared.Person;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.RootPanel;

public class PluginServer implements EntryPoint {

    public void onModuleLoad() {
        GWT.create(CommonService.class);
        onLoadImpl();

        RootPanel.get("container").add(getButton());
    }

    private native void onLoadImpl() /*-{
    if ($wnd.jscOnLoad && typeof $wnd.jscOnLoad == 'function') $wnd.jscOnLoad();
    }-*/;

    private Button getButton() {
        Button btn = new Button("Click!");
        btn.addClickHandler(new ClickHandler() {

            public void onClick(ClickEvent event) {
                Person p = new Person();
                p.setName("Smurf");
                p.setAge(500);
                displayPerson(p);
            }

        });
        return btn;
    }

    private native void displayPerson(Person person) /*-{
    // The below displays shows 'person' is not null
    alert("PluginServer.displayPerson.person is " + (person != null ? "not " : "") + "null");
    try {
        var pluginServer = new $wnd.com.anstis.pluginserver.CommonService();
        // The below displays shows 'pluginServer' is not null
        alert("PluginServer.displayPerson.pluginServer = " + pluginServer);
        pluginServer.displayPerson(person);
    } catch(err) {
        alert(err);
    }
    }-*/;

}

CommonService.java

package com.anstis.pluginserver.client;

import org.timepedia.exporter.client.Export;
import org.timepedia.exporter.client.Exportable;

import com.anstis.plugincommon.shared.Person;
import com.anstis.plugincommon.shared.PluginCallback;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Window;

@Export
public class CommonService implements Exportable {

    public void displayPerson(Person person) {
                //The below shows 'person' *IS* null
        Window.alert("CommonService.displayPerson.person is "
                + (person != null ? "not " : "") + "null");
        Window.alert("Name=" + person.getName());
    }

}

Person.java

package com.anstis.plugincommon.shared;

import org.timepedia.exporter.client.Exportable;

public class Person implements Exportable {

    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

}
4

2 に答える 2

2

Person クラスに Exportable を実装する必要はありません。

public class Person {

そしてそれは動作します。

于 2011-07-01T06:05:14.973 に答える
1

他の誰かがこの質問に出くわした場合、git://github.com/manstis/gwt-plugins.git に実際の例があります。

于 2011-07-08T20:44:01.907 に答える