我使用的是gwt-platform,objectify和appengine (java)。
根据最佳实践,我正在尝试创建一个用户和会话管理系统。我希望这是一个在应用程序中可重用的模块。
在我的应用程序中,基于gwt-platform中的Dispatch模块,有一个Login操作和一个Logout操作。
当我进入应用程序时,登录屏幕出现,一切工作正常。如果我在演示者之间导航,然后按下注销按钮,我会看到注销操作执行了多次,或者执行了其他任何操作。Action的执行次数(应该只运行一次)似乎与我在presenters之间导航的次数成正比。
该项目的源代码位于:http://code.google.com/p/gwt-platform-appengine-session-login-example/
如果有人能给我一些提示,告诉我哪里出了问题,那就太好了。此外,如果有人也想贡献给该项目,一些帮助将不胜感激。请给我发邮件。
发布于 2012-07-12 22:23:28
问题是您在onReset()方法中添加了Logout按钮的EventHandler。
但是,如果检查GWTP文档,则无论何时导航到presenter,都会调用onReset()方法。因此,如果您多次导航到presenter,则会多次添加EventHandler并执行多次(与您打开presenter的次数成正比)。
将EventHandler从onReset()方法移到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();
} https://stackoverflow.com/questions/11438722
复制相似问题