GWT - ClientBundle для файла CSS не работает с именами классов

У меня есть GWT-вопрос,

Я пытаюсь переместить свой css в ClientBundle как CssResource, поскольку он утверждает, что это лучшая практика, но есть проблема. Он работает с идентификатором элемента и именем элемента, но не с именами классов. Так что это работает, когда у меня есть

div{
   color: red;
}
#whatever_id{
   color: black;
}

Но если я добавлю имя класса с точкой (.), как

div{
   color: red;
}
#whatever_id{
   color: black;
}
.whatever_classname{
   color: green;
}

Затем я получаю следующее исключение

onModuleLoad() threw an exception

    Exception while loading module com.acatime.edutime.client.edutime. See Development Mode for details.



java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:411)
        at com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:200)
        at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:526)
        at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:364)
        at java.lang.Thread.run(Thread.java:744)
    Caused by: java.lang.ExceptionInInitializerError
        at com.acatime.edutime.client.edutime.onModuleLoad(edutime.java:29)
        ... 9 more
    Caused by: java.lang.RuntimeException: Deferred binding failed for 'com.acatime.edutime.client.resources.GeneralResources' (did you forget to inherit a required module?)
        at com.google.gwt.dev.shell.GWTBridgeImpl.create(GWTBridgeImpl.java:53)
        at com.google.gwt.core.shared.GWT.create(GWT.java:72)
        at com.google.gwt.core.client.GWT.create(GWT.java:86)
        at com.acatime.edutime.client.resources.GeneralResources.<clinit>(GeneralResources.java:11)
        ... 10 more
    Caused by: com.google.gwt.core.ext.UnableToCompleteException: (see previous log entries)
        at com.google.gwt.dev.shell.ModuleSpace.rebind(ModuleSpace.java:610)
        at com.google.gwt.dev.shell.ModuleSpace.rebindAndCreate(ModuleSpace.java:470)
        at com.google.gwt.dev.shell.GWTBridgeImpl.create(GWTBridgeImpl.java:49)
        ... 13 more

Любая идея, что мне не хватает???


person Madeline    schedule 02.05.2014    source источник
comment
Кстати, я не согласен с тем, что использование ClientBundle для CSS — лучшая практика. Один файл CSS намного проще поддерживать, вам не нужно перекомпилировать код, чтобы внести небольшие изменения, и дизайнеры могут работать с ним напрямую — это веские причины, чтобы остаться с файлом CSS.   -  person Andrei Volgin    schedule 02.05.2014
comment
Вы изменили whatever_classname в файле Java CssResource, а также в файле ui.xml? может быть, вы пропустили, чтобы правильно отобразить его везде.   -  person Braj    schedule 02.05.2014


Ответы (2)


Раньше была проблема с именами классов, содержащими символы подчеркивания. Попробуйте имена классов без подчеркивания.

person Andrei Volgin    schedule 02.05.2014

Спасибо Андрей и Брай за ваши ответы. Я нашел то, чего мне не хватало.

То, что я не понял с самого начала, заключалось в том, что я добавлял имя класса следующим образом:

myWidget.setStyleName("whateverClassname);

И в этом явно была проблема. Похоже, когда вы используете CSS через ClientBundle/CssResource, вам нужно указать имя класса следующим образом:

myWidget.setStyleName(MyResources.INSTANCE.myCss().whateverClassname());

И да-да, внезапно все заработало просто отлично :) Я надеюсь, что теперь это правильный способ добавления стиля в приложение GWT. Я новичок в GWT и стараюсь следовать рекомендациям, рекомендованным на веб-сайте GWT.

person Madeline    schedule 02.05.2014