首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自gwt-platform的操作被多次执行

来自gwt-platform的操作被多次执行
EN

Stack Overflow用户
提问于 2012-07-12 02:06:12
回答 1查看 489关注 0票数 1

我使用的是gwt-platform,objectify和appengine (java)。

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

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

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

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

如果有人能给我一些提示,告诉我哪里出了问题,那就太好了。此外,如果有人也想贡献给该项目,一些帮助将不胜感激。请给我发邮件。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-12 22:23:28

问题是您在onReset()方法中添加了Logout按钮的EventHandler。

但是,如果检查GWTP文档,则无论何时导航到presenter,都会调用onReset()方法。因此,如果您多次导航到presenter,则会多次添加EventHandler并执行多次(与您打开presenter的次数成正比)。

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

FirstApplicationPresenter.java

代码语言:javascript
复制
@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();
}            
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11438722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档