当用户登录GWTP时,如何修复gui中的delema控制?
好吧,这是我的困境: 我得到了一个标题presenter,它是嵌套的presenter。Customer presenter是Header presenter的子级(即Customer presenter被放入Header presenter的插槽中) 标题演示者中有登录面板 -以下是要求: -如果用户尚未登录,则无法看到Customer presenter的任何Gui -当用户成功登录时,它将在Customer presenter的Gui中显示 -当用户刷新页面时,系统将检查客户是否登录。如果他/她确实登录,则系统将显示客户演示者的Gui。如果他/她尚未登录,则提示错误消息 这就是我所做的 在Header presenter中,我有一个方法当用户登录GWTP时,如何修复gui中的delema控制?,gwt,gwtp,Gwt,Gwtp,好吧,这是我的困境: 我得到了一个标题presenter,它是嵌套的presenter。Customer presenter是Header presenter的子级(即Customer presenter被放入Header presenter的插槽中) 标题演示者中有登录面板 -以下是要求: -如果用户尚未登录,则无法看到Customer presenter的任何Gui -当用户成功登录时,它将在Customer presenter的Gui中显示 -当用户刷新页面时,系统将检查客户是否登录。如果
loginedSuccessfully()
,该方法将passUserInfo()
(使用eventBus
)导入Customer presenter
在Customer presenter中,我有:
private int custID=0;
public void onReset(){
super.onReset();
if(custID>0){
showGui();
}
else{
hideGui(); // the hideGui() has Window.alert("Pls Login");
}
}
private PassUserInfoHandler passUserInfoHandler=new PassUserInfoHandler(){
@Override
public void onPassUserInfo(PassUserInfoEvent event) {
custID=event.getCustID();
if(custID>0){
showGui();
}
else{
hideGui();
}
}
};
当用户刷新客户页面时。将调用重置时的onReset
,如果客户尚未登录,则不会显示Gui并提示消息
当用户通过单击登录按钮登录时,将调用passUserInfoHandler
&如果登录正常,将显示Gui
但问题是。当用户已经登录时&如果我打开一个新的浏览器选项卡并重新打开客户页面,那么这次将调用onReset
和passUserInfoHandler
wae&页面两次提示消息。这不好
但为什么会这样
这是因为在调用passUserInfoHandler
之前调用了onReset
。这就是为什么检查gui方法被调用了两次
我使用了Scheduler.get().schedulederferred(新命令(){};
,但它不起作用
您知道如何解决该问题,使其能够满足上述所有要求吗?GWTP是一种成熟的体系结构。它还具有这样的API,您可以通过创建自定义的守门人类来防止某些演示者暴露自己。例如,如果您希望某些演示者仅在美国er登录后,您可以编写以下类:
@Singleton
public class LoggedInGatekeeper implements Gatekeeper {
private final CurrentUser currentUser;
@Inject
public LoggedInGatekeeper (
final CurrentUser currentUser ) {
this.currentUser = currentUser;
}
@Override
public boolean canReveal() {
return currentUser.isLoggedIn();
}
}
然后,您只需将@UseGatekeeper注释添加到要保护的每个演示者的代理:
@ProxyCodeSplit
@NameToken("userSettings")
@UseGatekeeper( LoggedInGatekeeper.class )
public interface MyProxy extends ProxyPlace<MainPagePresenter> {}
@ProxyCodeSplit
@NameToken(“用户设置”)
@UseGatekeeper(LoggedInGatekeeper.class)
公共接口MyProxy扩展了ProxyPlace{}
我认为你应该去做,而不是手工写东西。即使一次可能是你的代码工作。但在功能上,你的代码中会出现一些新的错误。你可以参考这一点。谷歌的一些人不使用GateKeeper来管理登录,我不这么认为。我在我的产品中使用了它。我没有遇到这样的问题。你能给我那个链接吗?天哪艾因说"哦,我忘了说,我不是每次都往返。相反,我第一次保存用户信息,然后每次我需要从服务器获取一些信息时,我也会检查用户是否有权在服务器端执行这些操作。这样,我的守门人中不需要任何调度器,如果黑客试图绕过它,我也不需要任何调度器e请求本身在服务器端被阻止(即使他可以看到一些菜单和按钮,如果他不能获取任何内容和做任何事情,也不会对他有多大帮助)"我认为你误解了对话。对话的摘要就像不要将调度呼叫写入GateKeeper。他只使用GateKeeper。他所说的正确阅读“我的GateKeeper中不需要任何调度”,每次RPC呼叫都不是好主意。但你如何管理不同的用户类型?例如:如果客户登录,则显示客户页面,但如果业务用户登录,则显示业务页面等,同时LoggedInGatekeeper仅处理1个通用登录?