canReveal()
クラスClientState
にユーザー情報がある場合、関数はtrueを返します。そうでない場合は、最初にへの非同期呼び出しを使用してそのユーザー情報を取得しようとしますGetUser
。内部で行う必要があるのIF
は、この非同期呼び出しが()を返すまで何とか待つことです。これにより、ユーザー情報があるonSuccess
かどうかを確認できます。ClientState
どうやってやるの?ありがとう
public class MyGatekeeper implements Gatekeeper{
private DispatchAsync dispatcher;
@Inject
public MyGatekeeper(DispatchAsync dispatcher) {
this.dispatcher = dispatcher;
}
@Override
public boolean canReveal() {
if(ClientState.isUserLoggedin()==false) {
dispatcher.execute(new GetUser(Window.Location.getHref()),
new DispatchCallback<GetUserResult>() {
@Override
public void onSuccess(GetUserResult result) {
if (!result.getErrorText().isEmpty()) {
Window.alert(result.getErrorText());
return;
}
ClientState.setUserInfo(result.getUserInfo());
}
});
return ClientState.isUserLoggedin(); // WAIT till onSuccess returns!
}
}
return ClientState.isUserLoggedin();
}