如何在GWT中使用ClientBundle?

时间:2010-08-10 08:50:37

标签: java gwt clientbundle

我第一次使用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)在我想要的目录中,但应该有指定它的机制 - (会很棒)?

谢谢。

2 个答案:

答案 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 文件夹中所有内容的选项,则无论是否使用这些项目,所有项目都将包含在您的应用程序大战中。