我有一个Header演示者,它是嵌套的演示者。客户演示者是Header演示者的子节点(即,客户演示者被放入Header演示者的插槽中)。
所以我想使用MyGateKeeper来管理登录页面。将触发PassUserInfoEvent的HeaderPresenter。
public class MyGateKeeper implements Gatekeeper{
private String loginedUserID="";
private final EventBus eventBus;
@Inject
public MyGateKeeper (final EventBus eventBus){
this.eventBus = eventBus;
this.eventBus.addHandler(PassUserInfoEvent.getType(), new PassUserInfoHandler(){
@Override
public void onPassUserInfo(PassUserInfoEvent event) {
// TODO Auto-generated method stub
String userID=event.getUserID();
loginedUserID=userID;
}
});
}
@Override
public boolean canReveal(){
System.out.println(loginedUserID+"Test");
if(!loginedUserID.equals("")){
System.out.println(loginedUserMeaningID+"cxcxc");
return true;
}
else{
return false;
}
}
}
在CustomerPresenter中:
@ProxyCodeSplit
@NameToken(NameTokens.cust)
@UseGatekeeper(MyGateKeeper.class)
public interface MyProxy extends ProxyPlace<CustomerPresenter> {
}
然而,在运行之后,即使我记录也没有显示Gui。我测试了&amp;发现MyGateKeeper中的canReveal()
在调用PassUserInfoHandler()
之前被调用,因此canReveal
从不return true
;
如何解决这个问题?
答案 0 :(得分:1)
实现此目的的通常模式是绑定CurrentUser
中的Singleton
类:
bind(CurrentUser.class).in(Singleton.class);
并将其注入GateKeeper
。在GateKeeper
的{{1}}方法中,您将检查canReveal
:
currentUser.isLoggedIn()
您应该通过致电服务器来初始化private final CurrentUser currentUser;
@Inject
MyGateKeeper(CurrentUser currentUser) {
this.currentUser = currentUser;
}
@Override
public boolean canReveal() {
return currentUser.isLoggedIn();
}
内的CurrentUser.isLoggedIn
字段(请参阅https://github.com/ArcBees/GWTP/wiki/Bootstrapping-or-Application-Initialization)。以下是使用GWTP Bootstrapper
:
RestDispatch