MyPanel.ui.xml で:
<button class="btn" ui:field="myButton">Save</button>
MyPanel.java で:
public class MyPanel extends Composite {
...
@UiField ButtonElement myButtonUi;
...
public MyScreen() {
final HTMLPanel panel = uiBinder.createAndBindUi(this);
initWidget(panel);
Button myButton = Button.wrap(myButtonUi);
MyEntryPoint.java で:
if (....)
RootPanel.get().add(new MyPanel());
なので、UiBinderの使い方がよくわからないと思います。
Web デザイナーが UI フィールドに class="xx" などを設定できるように、ui:field=".." で HTML を使用するつもりです。GWT のドキュメントのほとんどは、ButtonElement ではなく Button を持っていることを前提としています。しかし、ボタンを使用する場合<g:Button>
、HTML ドキュメントに を含める必要があります。これは、Web デザイナーがクラスを設定できないことを意味しますか? UiBinder のポイントは、通常の HTML を使用して GWT コードと統合できるようにすることですか?
上記を実行すると、折り返し行で、次から開発モードで NullPointerException を取得します。
public static Button wrap(com.google.gwt.dom.client.Element element) {
// Assert that the element is attached.
assert Document.get().getBody().isOrHasChild(element);
本番モードでは問題なく動作するようです。Eclipse の開発モードのデバッガーで、式 "Document.get().getBody()" を右クリックして "検査" すると、Eclipse は "非クラス型オブジェクトに静的メッセージを送信できません" と表示します。
私は何をすべきか?最初に要素をアタッチする必要があるため、null ポインター例外が発生していますか? もしそうなら、どのように?(私はすでに createAndBindUi を呼び出しており、wrap に渡された要素は null ではありません)。