我有一个GWT应用程序,我需要调用web服务来检查登录的用户是否是管理员 - 然后如果Web服务返回true,则将admin Div设置为visible(默认隐藏)。
问题是程序在Web服务返回结果之前通过了检查。它看起来像这样
public class ModelClass{
boolean isAdmin = false;
public ModelClass(){
//Call webservice in constructor, if returns true, set isAdmin to true via setter
}
}
然后,在我的小部件中,我创建了一个ModelClass的实例,然后在页面完成加载之前的最后一步,我检查isAdmin属性以查看它是否为真,如果是 - 将Admin面板设置为visible。无论我多早尝试拨打电话,以及我多久检查一下属性,管理员检查总是在Web服务响应返回之前发生。
我尝试过更改侦听器 - 但它们只适用于小部件。我尝试将属性绑定为标签,并通过调用Web服务响应标签上的click()来使用click事件。
似乎没有任何作用 - 有没有人有任何想法?
答案 0 :(得分:2)
如果您使用的是回调机制,则必须在回调函数中执行此操作。
e.g。如果您正在使用GWT的请求构建器,则必须在请求回调的onResponseReceived中执行此操作:
public ModelClass() {
isAdmin();
}
private void isAdmin() {
RequestBuilder builder = new RequestBuilder(
RequestBuilder.GET, webserviceurl);
try {
request = builder.sendRequest(null, new RequestCallback() {
public void onResponseReceived(Request request,
Response response) {
int code = response.getStatusCode();
if(code >= 400) {
Window.alert(response.getStatusText());
return;
}
if(code == 200) {
// if admin is logged in
// hide your div
}
}
public void onError(Request request, Throwable exception) {
Window.alert("Error checking admin status");
}
});
}catch(RequestException re) {
Window.alert("Error checking admin status");
}
}