2013-06-24 3 views
0

Я создал два модуля name module1 и module2 в приложении gwt. Я хочу передать сообщение с модуля1 на module2 и module2 на module1 одновременно через несколько секунд. Я пишу следующий код, но он дает мне ошибку неспособность найти module1.gwt.xml в пути к классам.Как связывать два модуля в GWT

 public void onModuleLoad() { 
       mainBus.fireEvent(new PingEvent("-----Simulation Started-----")); 
     } 

     module1 

     public void onModuleLoad() 
      { 
       GWTEventBus.mainBus.addHandler(PingEvent.TYPE, new PingEventHandler(){ 
        public void onEvent(PingEvent event) { 
         System.out.print("Inside Ping --> "); 
         new Timer(){ 
          public void run() { 
           GWTEventBus.mainBus.fireEvent(new PongEvent("Pong fired...")); 
          } 
         }.schedule(1000); 
        } 
       }); 


      } 
     module2 
     public void onModuleLoad() 
      { 
       //final SimpleEventBus mainBus = new SimpleEventBus(); 
       GWTEventBus.mainBus.addHandler(PongEvent.TYPE, new PongEventHandler(){ 
        public void onEvent(PongEvent event) { 
         System.out.print("Inside Pong1 --> "); 
         new Timer(){ 
          public void run() { 
           GWTEventBus.mainBus.fireEvent(new PingEvent("Ping fired...")); 
          } 
         }.schedule(1000); 
        } 
       }); 


      } 

    plz help me. 

ответ

2

Если вы пытаетесь иметь две отдельные модули (* .nocache.js файлов), включенных в одной и той же странице, вы не можете передавать сообщения, если вы не будете использовать JS.

Используйте JSNI для экспорта некоторого метода из модуля1, так как он доступен в javascript, а затем вызывается этот метод из модуля2 с использованием JSNI.

package my.package.module1; 
public class MyClass1 implements EntryPoint { 
    public void onModuleLoad() { 
    exportMyJavaMethod(); 
    } 
    public static String myJavaMethod(String message) { 
    // Do whatever with the message received (create an event, etc.) 
    return "Hello " + message; 
    } 
    private native static exportMyJavaMethod() /*-{ 
    $wnd.myJavaMethod = @my.package.module1.MyClass1::myJavaMethod; 
    }-*/; 
} 


package my.package.module2; 
public class MyClass2 implements EntryPoint { 
    public void onModuleLoad() { 
    String ret = callMyJavaMethod("foo"); 
    } 
    private native static callMyJavaMethod(String s) /*-{ 
    return $wnd.myJavaMethod(s); 
    }-*/; 
} 

Обратите внимание, что с помощью JSNI, вы должны передавать сообщения на основе примитивных типов (см documentation)

BTW: Я бы предпочел использовать gwtexporter к методам экспорта и классов, которые я хочу доступны в JS, и gwtquery для вызова методов JS вместо использования JSNI.

0

У вашего приложения может быть только одна точка входа, но вы можете заставить свой основной модуль наследовать несколько других приложений gwt. Я бы предложил изучить наследование модулей. Вы можете наследовать модуль в вашем файле .gwt.xml, и этот модуль будет загружен, и его метод onModuleLoad будет вызван автоматически.

https://developers.google.com/web-toolkit/doc/latest/DevGuideOrganizingProjects#DevGuideModules

+1

'Ваше приложение может иметь только одну запись point' это не совсем верно, вы можете иметь несколько точек ввода-в приложении. –

+0

Я стою исправлено, после повторного просмотра документов, можно использовать несколько точек входа. – aglassman

+0

Этот ответ следует удалить, поскольку он неверен ... – snorbi