GWT - обработка событий от базовых виджетов в EntryPoint - PullRequest
1 голос
/ 14 марта 2011

Я искал в Интернете правильный ответ, но мне не удалось этого:

В классе 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, которое отправляет запрос полностью функциональный сервлет, который проверяет учетные данные. В этот конкретный момент, если сервлет определяет, что вход в систему действительно успешен, я хотел бы запустить событие «successLogin» (из 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.");
                    }
                }
            });
}

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

Ответы [ 2 ]

4 голосов
/ 14 марта 2011

Используйте EventBus. Кроме того, рассмотрите возможность принятия шаблона Model-View-Presenter, чтобы обеспечить поддержку вашего приложения по мере его роста:

0 голосов
/ 15 марта 2011

Позволяет иметь интерфейс, который реализуется классом EntryPoint, теперь есть ссылка на тип интерфейса, который на самом деле является объектом интерфейса. При использовании этой ссылки на интерфейс вызывается метод listner (interface), который соответствует вашим целям.

...