0

Gwt UIBinder を使用してカスタム ウィジェットをメイン UI からロードしようとすると、次のような例外が発生します。

[ERROR] <g:north size='5'> must contain a widget, but found <app:HeaderPanel ui:field='headerPanel'> Element <g:DockLayoutPanel styleName='{style.outer}' unit='EM'> (:8)

開発モードで XML を解析中。以下は、同じために作成した XML です。

<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
    xmlns:g="urn:import:com.google.gwt.user.client.ui" 
    xmlns:app='urn.import:com.test.test.client'
    xmlns:test='urn.import=com.test.test.client'>
     <ui:style src="Resources/GlobalStyles.css" />

  <g:DockLayoutPanel unit='EM' styleName='{style.outer}'>

    <g:north size='5'>
      <app:HeaderPanel ui:field='headerPanel' />
    </g:north>

    <g:west size='14'>
      <test:FriendList ui:field='friendList' />
    </g:west>

    <g:center>
      <g:HTMLPanel styleName='{style.boxPadding}'>

        <div class="{style.titleBar}">Latest Activity</div>
        <g:ScrollPanel ui:field='mainPanel' styleName='{style.mainPanel}' />
      </g:HTMLPanel>
    </g:center>

    <g:south size="3">
      <g:HTMLPanel styleName='{style.footerPanel}'>
        <div>
          <a href="#">Contact us</a>
          |
          <a href="#">Privacy</a>
          |
          <a href="#">About</a>
        </div>
      </g:HTMLPanel>
    </g:south>

  </g:DockLayoutPanel>

</ui:UiBinder> 

headerPanel ウィジェットは階層に存在します。上記の UiBinder に対応するコードを以下に示します。

public class TestApp implements EntryPoint {

    @UiField
    HeaderPanel headerPanel;
    @UiField
    ScrollPanel mainPanel;


    RootLayoutPanel root;

    private static TestApp singleton;

    public static TestApp get() {
        return singleton;
    }

    interface TestAppUiBinder extends UiBinder<DockLayoutPanel, TestApp> {
    }

    private static TestAppUiBinder uiBinder = GWT
            .create(TestAppUiBinder.class);


    @Override
    public void onModuleLoad() {
        // TODO Auto-generated method stub
        singleton = this;
        DockLayoutPanel outer = uiBinder.createAndBindUi(this);

        root = RootLayoutPanel.get();
        root.add(outer);
    }

}

基本的に、私は Gwt の初心者であり、物事を学ぼうとしています。この点についての指針は非常に役立ちます。

ありがとう。

4

2 に答える 2

1

とは <app:HeaderPanel ui:field='headerPanel' />? Widget を拡張しないと機能しません。そこに入れてみて<g:Label>FOO</g:Label>、それが機能するかどうかを確認してください。また、xmlns が正しいことを確認してください。パッケージ com.test.test.client でヘッダー パネルを探します。gwt ヘッダー パネルを使用しようとしている場合は、

<g:HeaderPanel ui:field="headerPanel" />

を誤解していると思いますxmlns。これは、Java クラスを探す場所を gwt に指示します。app と test の両方が同じパッケージを指しています。独自のカスタム ウィジェット クラスや、 や などの余分なものを含めたい場合にのみ、名前空間を追加する必要がありCellTableますDataGrid。ヘッダーを使用したいと考えています。

于 2012-08-18T21:23:12.290 に答える
0

xml 解析の問題であったため、問題は修正されました。入力していただきありがとうございます。

于 2012-08-19T05:28:31.990 に答える