GWT - 在运行时隐藏或显示Div

时间:2010-08-10 11:11:07

标签: gwt

我有一个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事件。

似乎没有任何作用 - 有没有人有任何想法?

1 个答案:

答案 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");
        }
    }