2011-06-30 30 views
1

我一直在努力將Java對象從Java通過JSNI(gwt-exporter生成)傳遞到Java,並想知道是否有人可以提供幫助? (「Person」),將它傳遞給JSNI方法(「displayPerson」),該方法調用與gwt-exporter(「CommonService.displayPerson」)公開的Java方法;然而最後階段的參數變爲空。GWT:gwt-exporter:傳遞對象

如果我傳遞一個字符串,它工作正常;它只是與我的對象我遇到了問題。

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; 
    } 

} 
+0

你想通過從一個GWT-模塊實例我讀另一個。我正在爲此做一個小項目。現在它僅限於接口,但無論如何可以是有用的。它在http://code.google.com/p/gwt-remote/ – helios

+0

順便說一句:我的stackoverflow配置文件包括我的電子郵件。 – helios

回答

1

如果碰到這個問題別人跌倒,我現在已經在git的工作示例://github.com/manstis/gwt-plugins.git

2

你不需要實現可導出爲Person類。

public class Person { 

它的工作原理。

+0

非常感謝,工作正常 - 但只有當一切都在單個GWT模塊中。當將「Person」從一個GWT模塊傳遞到另一個GWT模塊時,「Person」的實例變量未定義:( – manstis

+0

我不知道它應該工作,PluginService模塊必須繼承PluginCommon模塊(Person的源代碼)PluginCommon模塊必須有 trupanka