GWTP チュートリアルの GettingStarted に従いました
http://code.google.com/p/gwt-platform/wiki/GettingStarted
残念ながら、ハンドラーは機能しません。getUiHandlers() は null を返し、例外スタックトレースは以下と同じです:
GWT Platform の UiHandlers を使用するには? .
クラスを見る
public class AView extends ViewWithUiHandlers<AUiHandlers> implements APresenter.Display {
@UiTemplate("AView.ui.xml")
interface AViewUiBinder extends UiBinder<Widget, AView> {}
private static AViewUiBinder uiBinder = GWT.create(AViewUiBinder.class);
@UiField Button saveBtn;
@UiField Button cancelBtn;
@UiField DivElement errorDiv;
private Widget widget;
@Inject
public AssetView() {
widget = uiBinder.createAndBindUi(this);
}
public Widget asWidget() {
return widget;
}
// Implementation: Presenter's Display methods
public void setErrorDivText(String msg) {
errorDiv.getStyle().setDisplay(Display.BLOCK);
errorDiv.setInnerText(msg);
}
// Handlers
@UiHandler("saveBtn")
void onSaveButtonClick(ClickEvent event) {
if(getUiHandlers() != null) {
getUiHandlers().onSaveButtonClick();
}
}
@UiHandler("cancelBtn")
void onCancelButtonClick(ClickEvent event) {
if(getUiHandlers() != null) {
getUiHandlers().onCancelButtonClick();
}
}
}
ハンドラー インターフェイス
public interface AUiHandlers extends UiHandlers {
void onSaveButtonClick();
void onCancelButtonClick();
}
プレゼンター
public class APresenter extends Presenter<APresenter.Display, APresenter.AssetProxy> implements AUiHandlers {
public interface Display extends View, HasUiHandlers<AUiHandlers> {
public void setErrorDivText(String msg);
}
@ProxyStandard
@NameToken(NameTokens.ASSET)
public interface AssetProxy extends ProxyPlace<AssetPresenter> {}
@Inject
public AssetPresenter(EventBus eventBus, Display view, AssetProxy proxy) {
super(eventBus, view, proxy);
getView().setUiHandlers(this);
}
@Override
protected void onBind() {
super.onBind();
}
@Override
protected void revealInParent() {
RevealRootContentEvent.fire( this, this );
}
public void onSaveButtonClick() {
getView().setErrorDivText("Save clicked.");
}
public void onCancelButtonClick() {
getView().setErrorDivText("Cancel clicked.");
}
}
どこが間違っているのか理解できません。UiHandlers に関する実装は、上記のチュートリアルのリンクで説明したものと同じです。