代码之家  ›  专栏  ›  技术社区  ›  tpow

GWT-在运行时隐藏或显示一个DIV

gwt
  •  0
  • tpow  · 技术社区  · 14 年前

    我有一个GWT应用程序,我需要调用一个WebService来检查登录的用户是否是管理员,然后如果Web服务返回true,则将admin div设置为可见(默认情况下隐藏)。

    问题是程序在Web服务返回结果之前通过了检查。看起来像这样

    public class ModelClass{
    
    boolean isAdmin = false;
    
    
      public ModelClass(){
    //Call webservice in constructor, if returns true, set isAdmin to true via setter
      }
    }
    

    然后,在我的小部件中,我创建了一个modelclass实例,然后在页面完成加载之前的最后一步中,我检查i s admin属性以查看它是否为真,如果为真,则将管理面板设置为可见。无论我多早尝试进行调用,以及检查属性有多晚,管理检查总是在Web服务响应返回之前进行。

    我尝试过更改侦听器-但它们只适用于小部件。我尝试将属性作为标签进行装配,并通过从Web服务响应调用标签上的click()来使用click事件。

    似乎没什么用——有人有什么想法吗?

    1 回复  |  直到 14 年前
        1
  •  2
  •   naikus    14 年前

    如果使用回调机制,则必须在回调函数中进行。

    例如,如果您使用的是GWT的请求生成器,则必须在收到请求回调的响应中执行此操作:

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