GWT - 处理EntryPoint中底层小部件的事件

时间:2011-03-14 14:42:00

标签: events gwt event-handling uibinder

我在网上搜索了正确的答案,但我一直未能做到这一点:

在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),该窗口小部件将显示登录用户的帐户信息。我在LoginPane中有一个onClick事件,它向一个功能齐全的Servlet,用于检查凭据。在这一点上,如果Servlet确定登录确实成功,我想发起一个“successfulLogin”事件(来自LoginPane),它可以通知EntryPoint类,现在可以用AccountPane替换LoginPane。

    // 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 个答案:

答案 0 :(得分:4)

使用EventBus。此外,请考虑采用Model-View-Presenter模式,以便在应用程序增长时保持应用程序的可维护性:

答案 1 :(得分:0)

让我们有一个由EntryPoint类实现的接口, 现在有一个接口类型的参考,实际上是接口的对象。 使用此接口引用会调用listner(interface)mothod,它可以满足您的需要。

相关问题