0

我在 GWT 应用程序中创建了两个带有 UIBinder 的 java 类。我想借助在 EntryPoint 类中声明的通用方法将一个页面导航到另一个页面。

但是,我无法在 UIBinder 类的按钮单击事件上访问 EntryPoint 类的方法。

我的代码:

HelloUIBinder hb;
@UiField Button btnLogin;

public Test2() {
    initWidget(uiBinder.createAndBindUi(this));

    btnLogin.addClickHandler(new ClickHandler() {

        @Override
        public void onClick(ClickEvent event) {
            // TODO Auto-generated method stub

            strEmail = txtEmail.getText().toString();
            strPass = txtPass.getText().toString();

            Window.alert(strEmail);
            Window.alert(strPass);

            hb.onLogin(strEmail, strPass);
        }
    });
}

在 HelloUIBinder 类中,

登录方法:

public void onLogin(String email, String pass)
{
    Window.alert(email);
    Window.alert(pass);

    if(email == "abc@yahoo.com" && pass == "abc123")
    {
        RootPanel.get().clear();

        tp = new TestPage();
        RootPanel.get().add(tp);

        animationHelper.goTo(tp, Animation.SLIDE);
    }
    else
    {
        Window.alert("Authentication Failed");
    }
}

但是,虽然这种方法我收到 UmbrellaException 错误消息。如果我会在 UIBinder 类中编写相同的逻辑,那么它将可以正常进行条件检查。

现在我想通过使用类对象来使用来自不同类的方法。

有人知道吗?

请帮助解决从不同类调用方法的此错误。

提前致谢。

4

1 回答 1

0

您应该从 Umbrella 异常和可能的 UIBinder 模板中发布您的堆栈跟踪。

我真的建议使用地点更改事件和历史映射器来进行活动更改。你应该看看 Ray Ryan 的视频

Google I/O 2009 - 架构 GWT 应用程序的最佳实践 http://www.youtube.com/watch?v=PDuhR18-EdM

Google I/O 2010 - 构建 GWT 应用程序 http://www.youtube.com/watch?v=M5x6E6ze1x8

我们一直在为我们的许多项目使用 MVP 和位置历史,它运行得非常好。您可以使用简单导航或使用 placeContorller.goTo(new Place()); 方法。这也使书签和后退按钮能够正常工作。

另一种选择是您可以在入口点中构造一个 ClientFactory 单例实现,并使用它来处理简单的导航事件。但是,如果您的应用程序将来会变得更加复杂,那么控制器就是您要走的路。

于 2012-08-28T16:02:28.540 回答