【发布时间】:2012-11-26 16:15:28
【问题描述】:
我正在使用带有 MVP 的 GWT 2.4。 这是我的视图对象:
public class LoginWidget extends Composite implements LoginWidgetView {
interface Binder extends UiBinder<Widget, LoginWidget> {
}
private static final Binder BINDER = GWT.create(Binder.class);
@UiField Anchor settings;
public LoginWidget() {
initWidget(BINDER.createAndBindUi(this));
}
@UiHandler("settings")
void handleSettingsClick(ClickEvent e) {
presenter.showSettings();
}
private Presenter presenter;
@Override
public void setPresenter(Presenter presenter) {
this.presenter = presenter;
}
}
我正在设置视图的演示者
...
getLoginWidget().setPresenter(new LoginWidgetPresenter(placeController));
LoginWidgetPresenter 当然实现了视图的 Presenter 接口。但是当我点击设置锚点时,presenter 引用仍然为 null,因此 presenter.showSettings() 会抛出 NullPointerException。 我想在调用 LoginWidget 的构造函数并通过
初始化小部件之后initWidget(BINDER.createAndBindUi(this));
@UiHandler("settings") 方法中的点击处理代码会忽略对已使用对象的更改,例如我的演示者对象? 有没有办法在调用 initWidget() 方法后设置 Presenter 对象? 或者是否可以自定义 @UiHandler/initWidget() 行为,然后我可以设置我的演示者?
谢谢,曼努埃尔
【问题讨论】:
-
你调试了吗?在
setPresenter和handleSettingsClick中都有断点,并确保它们以正确的顺序在同一个LoginWidget实例上调用? -
感谢您的回答。我已经调试过了。
setPresenter()使用 real 演示者实例调用。但是在handleSettingsClick()组件的presenter类变量为空。所以我认为它必须是一个不同的LoginWidget实例,我在其上设置了presenter。但这正是我必须寻找的。我只是想确保它通常可以正常工作,我已经实现了它。