2010-08-10 20 views
0

我有一個GWT應用程序,我需要調用Web服務來檢查用戶是否登錄了管理員 - 然後將管理員Div設置爲可見(默認情況下隱藏),如果Web服務返回true。GWT - 在運行時隱藏或顯示Div

問題是程序在Web服務可以返回結果之前通過檢查。它看起來像這樣

public class ModelClass{ 

boolean isAdmin = false; 


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

然後,在我的窗口小部件,我創建了ModelClass的一個實例,然後在完成加載頁之前的最後一步,我檢查isAdmin屬性,看它是否是真的,如果是這樣 - 將管理面板設置爲可見。無論我多久嘗試撥打電話,以及有多久我檢查該媒體資源,管理員檢查都會在網絡服務響應返回之前發生。

我試過改變聽衆 - 但他們只適用於小部件。我嘗試將該屬性作爲標籤進行綁定,並通過從Web服務響應中調用標籤上的click()來使用單擊事件。

似乎沒有任何工作 - 有沒有人有任何想法?

+0

的一個問題是,我可以使用Firebug或Chrome的開發工具來檢查DOM找到隱藏div並顯示它。你應該考慮一種與隱藏它不同的方法。 – 2010-08-10 12:05:25

回答

2

如果您使用回調機制,您必須在回調函數中執行此操作。

例如如果您使用的是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"); 
     } 
    }