GWT UiBinder不加载样式表

时间:2010-03-12 11:07:27

标签: css gwt resources uibinder

我想使用UiBinder创建一个GWT小部件。所以我做了:

UserPanel.ui.xml像这样:

<?xml version="1.0" encoding="UTF-8"?>
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
    xmlns:g='urn:import:com.google.gwt.user.client.ui'>

    <ui:with field="res" type="com.example.resources.UserPanelResources"  />

    <g:VerticalPanel styleNames='{res.userpanel.main}'>
      ...some other widgets go here...
    </g:VerticalPanel>
</ui:UiBinder>
像这样的UserPanel.css:

.main {
    width: 1000px;
    background-color: #f9f9fa;
    padding: 15px 10px;
    font-family: "Georgia";
}

和UserPanelResources.java一样:

public interface UserPanelResources extends ClientBundle {
    public interface UserPanelCss extends CssResource {
        String main();
    }

    @Source("css/userpanel.css")
    UserPanelCss userpanel();
}

所有文件和包都在他们的位置,因为一切都编译得很好。但是当我运行开发模式时,样式不会应用!我尝试了很多不同的方法,但它仍然不起作用。

我注意到,在HTML中,VerticalPanel被赋予了由GWT模糊的类名,但CSS没有发送到浏览器 - 实际上,GWT甚至没有要求它。

我错过了什么吗?

2 个答案:

答案 0 :(得分:7)

好的,我找到了解决方案。

原来是未注入的UserPanelCss。

解决方案是在UserPanelResources,java:

public interface UserPanelResources extends ClientBundle {
    public final static UserPanelResources INSTANCE = GWT.create(UserPanelResources.class)

    public interface UserPanelCss extends CssResource {
        String main();
    }

    @Source("css/userpanel.css")
    UserPanelCss userpanel();
}

在UserPanel.java类中只需添加:

static {
    UserPanelResources.INSTANCE.userpanel().ensureInjected();  
}

答案 1 :(得分:3)

我在我的UiBinder文件中使用的CSS资源遇到了同样的问题。

我在我的widget构造函数中添加了一个hack以修复它。这是使用上述类名的等价物:

  @Inject
  UserPanel(UserPanelResources resources) {
    resources.userpanel().ensureInjected();
    initWidget(BINDER.createAndBindUi(this));
    ...
  }