Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GWT MVP。如何使用事件总线?_Java_Gwt - Fatal编程技术网

Java GWT MVP。如何使用事件总线?

Java GWT MVP。如何使用事件总线?,java,gwt,Java,Gwt,在项目中,我使用MVP模式。我有2个视图和2个相应的演示者。从“Presenter2”中,我想在“View1”中获取所选值。最好的方法是什么?我知道最好使用事件总线。但我必须创建两个事件和两个事件处理程序(当Presenter2需要从View1中选择值时,第一个事件将上升,它将在Presenter1中处理。第二个事件将在Presenter1中上升(如:new selectedValueEvent(值))通知演示者2所选值。因此演示者2将处理selectedValueEvent(value)并获取

在项目中,我使用MVP模式。我有2个视图和2个相应的演示者。从“
Presenter2
”中,我想在“
View1
”中获取所选值。最好的方法是什么?我知道最好使用事件总线。但我必须创建两个事件和两个事件处理程序(当Presenter2需要从
View1
中选择值时,第一个事件将上升,它将在
Presenter1中处理。
第二个事件将在
Presenter1
中上升(如:
new selectedValueEvent(值))
通知演示者2所选值。因此演示者2将处理
selectedValueEvent(value)
并获取
value
)。

如果演示者需要获取所选值的时间点是当用户执行某个操作时,您将无法使用事件绕过该操作。(尽管如此,也许两位演讲者都可以对同一事件做出反应,所以不需要使用两个不同的演讲者?)

如果已知演示者何时需要获取值(工作流中已定义的步骤),则可以按如下方式进行操作:

保留对
客户端工厂中视图的引用

public class ClientFactoryImpl implements ClientFactory {
    private static final EventBus eventBus = new SimpleEventBus();
    /* The views */
    private static final SampleView sampleView = new SampleView(); 
    ....

    public ClientFactoryImpl(){
        eventBus.addHandler(ReleaseAddedEvent.type, sampleView);
        ....
    }


    // getter and setters
}

因此,在Presenter中,您可以获得对视图的引用:
SampleView视图=MyEntryPoint.getClientFactory().getSampleView();
,然后您可以从视图中调用一个方法,该方法返回所选值。

是的,在我的应用程序中,我使用clientFactory。现在它的工作方式是您编写的(获取另一个(与此Presenter不对应)查看并调用此视图getSelected()方法)…但我认为在Presenter中创建引用以使其不对应于视图不是一个好主意..还是不好?如果您只是在Presenter中的方法中创建一个本地引用,这应该不是一个问题,因为只要执行此方法,本地引用就存在。