2010-08-10 3 views
0

У меня есть приложение GWT, где мне нужно вызвать веб-службу, чтобы проверить, является ли пользователь подписанным, является администратором, а затем установите для admin div видимое (скрытое по умолчанию), если веб-сервис возвращает true.GWT - Скрытие или показ Div во время выполнения

Проблема заключается в том, что программа передает проверку, прежде чем веб-служба сможет вернуть результат. Это что-то ищет, как этого

public class ModelClass{ 

boolean isAdmin = false; 


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

Тогда в моем виджете, я создаю экземпляр ModelClass, а затем на последней стадии перед завершением загрузки страницы, я проверить свойство IsAdmin, чтобы увидеть, если это правда, если так - установите панель администратора на видимую. Независимо от того, как рано я пытаюсь выполнить вызов, и как поздно я проверяю свойство, проверка администратора всегда происходит до ответа веб-службы.

Я пробовал сменить слушателей - но они применимы только к виджетам. Я попробовал фальсифицировать свойство как метку и использовать событие click, вызвав click() на ярлыке из ответа веб-службы.

Ничего не работает - есть ли у кого-нибудь идеи?

+0

Одна из проблем этого подхода заключается в том, что я могу использовать Firebug или Chrome в Dev инструменты для проверки DOM, чтобы найти скрытый div и показать его. Вы должны рассмотреть другой подход, чем просто скрывать его. –

ответ

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"); 
     } 
    } 
Смежные вопросы