2011-03-14 6 views
1

Я искал в Интернете правильный ответ, но я не в состоянии достичь этого:GWT - Обработка событий из основных виджетов в EntryPoint

В классе EntryPoint, мне нужно управлять виджетами в соответствии с событиями, которые происходят в вложенных виджетах. Я очистил код, чтобы сосредоточиться только на том, что здесь важно.

Я создал несколько виджетов UiBinder, например, область входа, в которой пользователь может ввести свои учетные данные. В моем классе EntryPoint я добавляю виджеты в правильную позицию.

// This is from EntryPoint class 

public void onModuleLoad() {    
     LoginPane lp = new LoginPane(); 
     RootPanel.get("headerRightPane").add(lp); 
     lp.setFocus(); 

     // Other widgets added in same manner after this point... 
} 

Я хотел бы успешной регистрации, чтобы удалить LoginPane и заменить его другим виджетом (AccountPane), который будет показывать информацию об учетной записи для пользователя, вошедшего в систему. У меня есть событие OnClick, в LoginPane, что отправляет запрос на полностью функциональный сервлет, который проверяет учетные данные. В этом точном случае, если Servlet определяет, что логин действительно успешный, я хотел бы запустить событие «успешно» (из LoginPane), которое могло бы уведомить класс EntryPoint, что теперь LoginPane будет заменен на AccountPane.

// This is from LoginPane class 

    @UiHandler("loginButton") 
    void onClick(ClickEvent e) { 
     checkCredentials(usernameField.getText(), passwordField.getText()); 
    } 

    public void checkCredentials(String username, String password) { 
    String usernameToServer = username; 
    String passwordToServer = password; 

    credentialsService.credentialsServer(usernameToServer, passwordToServer, 
      new AsyncCallback<CredentialsPaneContent>() { 
       public void onFailure(Throwable caught) { 
        answerLabel.setText(Utilities.SERVER_ERROR); 
       } 

       public void onSuccess(CredentialsPaneContent result) { 
        if (result == null) { 
         answerLabel.setText("Login Failed."); 
        } else { 
         // Fire event here (to be caught by EntryPoint class) 
         answerLabel.setText("Login Successful."); 
        } 
       } 
      }); 
} 

Итак, вопрос: как мне приступить к созданию, пожару и прослушиванию события из моего вложенного виджета?

ответ

0

Позволяет иметь интерфейс, который реализуется с помощью EntryPoint class, теперь имеют ссылку типа интерфейса, которая фактически является объектом интерфейса. Использование этого интерфейса refernence вызывает список (интерфейс) mothod, который служит вашей цели.

Смежные вопросы