我的基于登录的应用程序需要始终知道登录用户的用户名。(MVP)。所以我从url获取用户名,但是当登录成功后打开页面时,我无法从url获取用户名,因为它似乎不存在,但它存在。它仅在刷新后有效。然后我可以得到用户名。
URL 的形式是http://127.0.0.1:8888/AdministrareBloc.html#AdminPlace:admin
,我将字符串拆分为仅获取管理部分。
我认为这是因为它在验证用户之前下载了代码。所以我在我的代码中放置了一个分割点,如下所示:(我不知道我是否放置正确)
loginButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
final String username = usernameBox.getText();
final String password = passwordBox.getText();
GWT.runAsync(new RunAsyncCallback() {
@Override
public void onSuccess() {
performUserConnection(username, password);
}
@Override
public void onFailure(Throwable reason) {
// TODO Auto-generated method stub
}
});
}
});
private static void performUserConnection(String username, String password) {
DBConnectionAsync rpcService = (DBConnectionAsync) GWT.create(DBConnection.class);
ServiceDefTarget target = (ServiceDefTarget) rpcService;
String moduleRelativeURL = GWT.getModuleBaseURL() + "DBConnectionImpl";
target.setServiceEntryPoint(moduleRelativeURL);
rpcService.authenticateUser(username, password, new AsyncCallback<User>() {
@Override
public void onSuccess(User user) {
if (user.getType().equals("User")) {
String username = user.getUsername();
presenter.goTo(new UserPlace(username));
} else if (user.getType().equals("Admin")) {
String username = user.getUsername();
presenter.goTo(new AdminPlace(username));
}
}
}
}
当用户单击登录按钮时会发生这种情况。分割点的放置是否正确?成功登录后如何获取用户名而不需要刷新页面?
更新
我今天尝试了一个技巧,在 AdminViewImpl 和 UserViewImpl 中放置了一个 Window.Location.reload(),当应用程序启动时,页面每秒重新加载一次,所以这对我来说意味着没有正确使用分割点并且浏览器会在他真正需要之前下载代码,这就是为什么我在刷新后能够看到用户名,因为它会重新下载代码,并且我在刷新时已经登录。
提前致谢