我第一次使用GWT ClientBundle。我编写了扩展它的接口,这里是代码:
package edu.etf.fuzzy.client.login;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.ImageResource;
public interface Resources extends ClientBundle {
@Source("logo_federacija.jpg")
ImageResource logo();
@Source("shim.gif")
ImageResource shim();
}
我的问题是:如何确定这些资源(本例中的图像)的确切位置。我应该把它们放进去: a)在与接口相同的目录中 - (丑陋)? b)在一些永远无法改变的特定目录中? c)在我想要的目录中,但应该有指定它的机制 - (会很棒)?
谢谢。
答案 0 :(得分:24)
我通常会为资源创建一个新包(com.example.project.resource
)并将ClientBundle
接口和相应的资源放在一起(如同在一个目录中一样) - 它是一个java文件加上一堆图像,无需进一步分离,恕我直言。
至于资源的路径 - 您可以通过@Source("path")
注释传递它们。例如,如果ClientBundle
中有com.example.project.resource
界面,com.example.project.images
中有图片,那么您就会写@Source("../images/shim.gif")
。您可以使用绝对路径,但请确保将它们存储在静态变量中并在资源之间共享,因此可以轻松覆盖;)
答案 1 :(得分:3)
与伊戈尔的观点类似:
com.yoursite.resources: YourClientBundle.java
com.yoursite.resources.css: YourCssResource.java
com.yoursite.resources.images: image files here
这里的关键是如果你不使用资源(CSS / Image / Text),GWT编译器将忽略它。这可以防止 war bloat ,因为您的应用程序获得了持有者,并且您有数百张图像,并且不确定使用哪些图像,哪些不是。
如果您使用删除 public / images 文件夹中所有内容的选项,则无论是否使用这些项目,所有项目都将包含在您的应用程序大战中。