0

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 ではありません)。

4

2 に答える 2

1

HTML を使用できます。唯一の制限は、g:Buttonのようなコンテナー内にある必要があることg:HTMLPanelです。良い点g:HTMLPanelは、HTML をレンダリングできることです。

以下の例を参照してください。

<g:HTMLPanel>       
    <div>
    test
    </div>

    <table border="1">
    <th>
        button
    </th>
    <tr>
    <td>    
    <g:Button styleName="{style.important}" ui:field="button"/>
    </td>
    </tr>
    </table>

    <div>
    test
    </div>      
</g:HTMLPanel>

于 2014-07-31T14:46:11.773 に答える