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 包中查找 Header Panel。如果您尝试使用 gwt 标题面板,那么它需要

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

我想你误解了xmlns. 这告诉 gwt 在哪里寻找你的 java 类。app 和 test 都指向同一个包。仅当您想要包含自己的自定义小部件类或额外的东西(如CellTableDataGrid. 我相信你想要使用标题。

于 2012-08-18T21:23:12.290 回答
0

问题已得到修复,因为它是 xml 解析问题。感谢您提供输入。

于 2012-08-19T05:28:31.990 回答