GWTP如何传递PlaceManager对象来查看?

GWTP how to pass PlaceManager object to view?

我有视图,与服务器通信以上传和下载文件。

我已将来自服务器的未经授权响应的事件处理程序添加到我的视图中。

现在我想将用户重定向到登录页面:

PlaceManager pm;
PlaceRequest placeRequest = new PlaceRequest.Builder(pm.getCurrentPlaceRequest()).nameToken(Routing.Url.login).build();
pm.revealPlace(placeRequest);
MaterialToast.fireToast("You session has expired.");

但是为此我需要 PlaceManager 对象。如何将它注入我的视图?

我使用 GWT 2.7 和 GWTP

首先,您不应该在视图中包含任何此类逻辑。相反,您应该创建

public interface YourViewUiHandlers extends UiHandlers{ 
    void navigate();
}

然后更改 MyView 接口以实现 HasUiHandlers<YourViewUiHandlers> 并在 ViewImpl 中将 extends ViewImpl 替换为 extends ViewWithUiHandlers<YourViewUiHandlers >

现在在您看来,您可以这样呼叫您的演示者:

getUiHandlers().navigate();

当然你的主持人应该

  1. 实施 YourViewUiHandlers
  2. 在它的构造函数中做类似 view.setUiHandlers(this);
  3. 的事情

PlaceManager 可以通过 @Inject 注释直接注入到 Presenter 中。 实际上,如果你想让它变得糟糕和肮脏,@Inject 也会为视图做这件事。如果它不是 View 而只是一些组合 - 使用 @UiField(provided=true) 用 GIN 初始化它,然后简单地将它注入 constructor/set 之前的字段 initWidget();