如何在GWT中进行客户捆绑?

2022-09-02 01:33:08

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

谢谢。


答案 1

我通常为资源()创建一个新的包,并将接口和适当的资源放在那里(一起,就像在一个目录中一样) - 它是一个java文件加上一堆图像,不需要进一步分离,恕我直言。com.example.project.resourceClientBundle

至于资源的路径 - 您可以通过注释传递它们。例如,如果您将界面和图像放在 中,则编写 .您可以使用绝对路径,但请确保将它们存储在静态变量中并在资源之间共享,以便可以轻松覆盖;)@Source("path")ClientBundlecom.example.project.resourcecom.example.project.images@Source("../images/shim.gif")


答案 2

类似于伊戈尔的观点:

com.yoursite.resources: YourClientBundle.java
com.yoursite.resources.css: YourCssResource.java
com.yoursite.resources.images: image files here

这里的关键是,如果您不使用资源(CSS/图像/文本),GWT编译器将忽略它。这可以防止战争膨胀,因为您的应用程序获得了持有者,并且您有数百个图像,并且不确定哪些被使用,哪些不使用。

如果您使用删除公共/图像文件夹中所有内容的选项,则所有项目都将包含在您的应用程序战争中,无论它们是否被使用。


推荐