Gwt UIBinder DockLauout北元素引发错误必须包含一个小部件,但找到<app:headerpanel ui:field =“headerPanel”> </app:headerpanel>

时间:2012-08-18 20:32:14

标签: gwt uibinder

在尝试使用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的新手,并试图学习这些东西。在这方面的任何指针都将是一个很大的帮助。

感谢。

2 个答案:

答案 0 :(得分:1)

是什么 <app:HeaderPanel ui:field='headerPanel' />?如果它没有扩展Widget那么它将无法工作。尝试将<g:Label>FOO</g:Label>放在那里,看看它是否有效。还要确保您的xmlns正确无误。它将在com.test.test.client包中查找Header Panel。如果您正在尝试使用gwt Header Panel,那么它需要

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

我认为你误解了xmlns。这告诉gwt在哪里寻找你的java类。 app和test都指向同一个包。如果要包含自己的自定义窗口小部件类或CellTableDataGrid等额外内容,则只应添加命名空间。我相信你想要使用标题。

答案 1 :(得分:0)

问题得到解决,因为它是xml解析问题。 感谢您提供意见。