为什么在调用事件处理程序(GWT)之前调用GateKeeper的Reveal()?

时间:2014-04-14 09:26:53

标签: gwt gwtp

我有一个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;

如何解决这个问题?

1 个答案:

答案 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