A simple way is to use the goTo method of PlaceController.
public class MemberActivity extends AbstractActivity implements MemberView.Presenter {
private final ClientFactory clientFactory;
private MemberView view;
private static String sid;
public MemberActivity(ClientFactory factory){
clientFactory = factory;
}
@Override
public void start(final AcceptsOneWidget panel, EventBus eventBus) {
sid = Cookies.getCookie("sid");
if (clientFactory.getMemberService().validSession(sid, new AsyncCallback<Boolean>(){
@Override
public void onFailure(Throwable caught) {
clientFactory.getPlaceController().goTo(new LoginPlace());
}
@Override
public void onSuccess(CmmsAccountDto result) {
if (!result){
clientFactory.getPlaceController().goTo(new LoginPlace());
return;
}
view = clientFactory.getMemberView();
view.setPresenter(this);
panel.setWidget(view);
}
});
}
}
But, this way have a problem that browser history is increased.
The browser cannot return to the history before MemberPlace with the back button because the browser redirects to LoginPlace when it visits MemberPlace.
Then, I used the approach that called another Activity from a Activity.
public class MemberActivity extends AbstractActivity implements MemberView.Presenter {
private final ClientFactory clientFactory;
private MemberView view;
private static String sid;
public MemberActivity(ClientFactory factory){
clientFactory = factory;
}
@Override
public void start(final AcceptsOneWidget panel, final EventBus eventBus) {
sid = Cookies.getCookie("sid");
if (clientFactory.getMemberService().validSession(sid, new AsyncCallback<Boolean>(){
@Override
public void onFailure(Throwable caught) {
loginView(panel, eventBus);
}
@Override
public void onSuccess(CmmsAccountDto result) {
if (!result){
loginView(panel, eventBus);
return;
}
view = clientFactory.getMemberView();
view.setPresenter(this);
panel.setWidget(view);
}
});
}
private void loginView(AcceptsOneWidget panel, EventBus eventBus){
LoginActivity loginActivity = new LoginActivity(clientFactory);
loginActivity.start(panel, eventBus);
}
}
In above code, The view can be switched without the history changing.