来自gwt平台的操作被执行多次



我使用的是gwt平台、objectify和appengine(java)。

我正在尝试根据最佳实践创建一个用户和会话管理系统。我希望这是应用程序中的一个可重用模块。

在我的应用程序中,基于gwt平台中的Dispatch模块,我有一个Login操作和一个Logout操作。

当我进入应用程序时,登录屏幕出现,一切正常。如果我在演示者之间导航,然后按下注销按钮,我会看到注销操作被执行了多次,或者执行了任何其他操作。一个Action(应该只运行一次)的执行次数似乎与我在演示者之间导航的次数成正比。

项目的源代码位于:http://code.google.com/p/gwt-platform-appengine-session-login-example/

如果有人能告诉我出了什么问题,那就太好了。此外,如果有人也愿意为该项目做出贡献,我们将不胜感激。请给我发电子邮件。

问题是在onReset()方法中为Logout按钮添加EventHandler
但是,如果检查GWTP文档,则每当导航到演示者时都会调用onReset()方法。因此,如果您多次导航到演示器,EventHandler将被添加多次,从而被执行多次(与您打开演示器的次数成正比)。

EventHandleronReset()方法移到onBind()方法中,因为onBind()在演示者的生命周期中只调用一次,而且它是您应该添加EventHandlers的地方。除此之外,将其包装到registerHandler()方法中,以便在调用onUnbind()时自动删除。

FirstApplicationPresenter.java:

@Override
protected void onBind() {
    super.onBind();
    getView().getLogoutBtn().setText("Logout "+username);
    registerHandler(getView().getLogoutBtn().addClickHandler(new ClickHandler() {
        @Override
            public void onClick(ClickEvent event) {
                Logout action = new Logout();
                dispatchAsync.execute(action, logoutCallback);
            }
    }));
}
@Override
protected void onReset() {
    super.onReset();
}            

相关内容

  • 没有找到相关文章

最新更新