Я искал в Интернете правильный ответ, но мне не удалось этого:
В классе 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.");
}
}
});
}
Итак, вопрос: как мне приступить к созданию, запуску и прослушиванию события из моего вложенного виджета?