GWT:在视图impl到位之间传递数据

时间:2014-08-02 17:26:51

标签: java gwt uibinder gwt2

我有一个视图impl说SampleView.java.I在我的视图中有一个表。当单击一行时,一个新的地方被传递给地方控制器,如,

placeController.goto(new ScreenPlace()) ;

现在的问题是,我需要将一些数据从SampleView传递给ScreenPlace,这样我就可以在ScreenView.Data中使用该数据基本上是一个键值对的MAP,我需要通过ScreenPlace从SampleView传递给ScreenView换句话说,我怎样才能将数据从一个视图转移到另一个视图。我该怎么做?。我是GWT的新手。请帮助!。

2 个答案:

答案 0 :(得分:0)

基本上有两种方法可以解决这个问题:

  1. 通过 EventBus传递数据:您可以创建一个事件(即LoadSampleDataEvent),您可以将数据传递到全局{ {1}}。因为您将在EventBus中引用全局EventBus,所以您可以在那里处理事件并将其显示在相应的视图中。

  2. 对您网址中的数据进行编码:您可能会ScreenPlaceURL相关联(即ScreenPlace)。您可以在该网址http://myHost/#screenhttp://myHost/#screen?id=1)中对数据的某些唯一标识符进行编码。然后在http://myHost/#screen/1中,您可以解析URL中的ScreenPlace参数并检索数据。您可能需要将包含数据的地图传递给id。这可以通过ScreenPlace上的Event或全局EventBus实例来完成。

  3. 我会推荐第二个appraoch,因为它使你的Singleton“无国籍”并且引人注目。用户只需打开网址(即ScreenPlace),您的http://myHost/#screen?id=10就会显示详细视图。

    要使其正常工作,您必须在尚未加载地图时处理该情况(例如,如果用户直接导航到相应的URL而不是先通过您的表)。

答案 1 :(得分:0)

Handler Interface:


import com.google.gwt.event.shared.EventHandler;

public interface MessageTransferHandler extends EventHandler
 {
    public void onMessageTransfer(MessageTransferEvent event);
}

Event Class:



import com.google.gwt.event.shared.GwtEvent;

public class MessageTransferEvent extends GwtEvent<MessageTransferHandler>{

    String message;
    int flag;

    public MessageTransferEvent(String message,int flag)
    {
        this.message=message;
        this.flag=flag;
    }
    public String getMessage()
    {
        return message;
    }

    public int getFlag()
    {
        return flag;
    }
    public static Type<MessageTransferHandler> TYPE=new Type<MessageTransferHandler>();
    @Override
    public com.google.gwt.event.shared.GwtEvent.Type<MessageTransferHandler> getAssociatedType() {
        return TYPE;
    }

    @Override
    protected void dispatch(MessageTransferHandler handler) {
        handler.onMessageTransfer(this);
    }

}