GWT UiBinder не загружает таблицу стилей - PullRequest
4 голосов
/ 12 марта 2010

Я хотел сделать виджет GWT, используя UiBinder. Итак, я сделал:

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 ]

7 голосов
/ 12 марта 2010

Хорошо, я нашел решение.

Оказалось, что это не введенный 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();  
}
3 голосов
/ 07 января 2011

У меня была та же проблема с ресурсом CSS, который я использовал только в своем файле UiBinder.

Я добавил хак к конструктору виджетов, чтобы исправить это. Вот эквивалент с использованием вышеуказанных имен классов:

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