【问题标题】:GWT - ClientBundle for CSS file not working with class namesGWT - CSS 文件的 ClientBundle 不能使用类名
【发布时间】:2014-06-18 14:33:32
【问题描述】:

我有一个 GWT 问题,

我正在尝试将我的 css 作为 CssResource 移动到 ClientBundle,因为它声称是最佳实践,但是有一个问题。它确实适用于元素 ID 和元素名称,但不适用于类名。所以当我有的时候它可以工作

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

知道我错过了什么吗???

【问题讨论】:

  • 顺便说一句,我不同意将 ClientBundle 用于 CSS 是最佳实践。单个 CSS 文件更易于维护,您无需重新编译代码即可进行小的更改,设计人员可以直接使用它 - 这些都是保留 CSS 文件的好理由。
  • 您是否更改了Java CssResourceui.xml 文件中的whatever_classname?可能你错过了在任何地方正确映射它。

标签: css gwt classname clientbundle cssresource


【解决方案1】:

曾经有一个类名包含下划线的问题。尝试不带下划线的类名。

【讨论】:

    【解决方案2】:

    感谢 Andrei 和 Braj 的回答。我找到了我缺少的东西。

    我从一开始就没有得到它的是我正在添加类名,如下所示:

    myWidget.setStyleName("whateverClassname);
    

    这显然是问题所在。看起来当您通过 ClientBundle/CssResource 使用 CSS 时,您必须指定类名如下:

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

    嗯嗯,突然间一切都正常了 :) 我希望现在这是为 GWT 应用程序添加样式的正确方法。我是 GWT 的新手,并试图遵循 GWT 网站上推荐的最佳实践。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      相关资源
      最近更新 更多