GWT,为什么 CellTable 在 Eclipse 中运行时不显示图像?

GWT, why CellTable doesn't show Image when running in Eclipse?

我有密码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
ClickableTextCell imageCell = new ClickableTextCell() {

    @Override
    public void render(Context context, SafeHtml data, SafeHtmlBuilder sb) {
        if (data != null) {
            String imagePath ="contact.jpg";
            //sb.appendEscaped(imagePath);
            sb.appendHtmlConstant("<img width="20" src="" + imagePath +"">");
        }
    }

};

Column<List<String>,String> imageColumn = new Column<List<String>,String>(imageCell) {

    @Override
    public String getValue(List<String> object) {
        return"";
    }

 };

imageColumn.setFieldUpdater(new FieldUpdater<List<String>, String>() {

     @Override
     public void update(int index, List<String> object, String value) {
         //Window.alert("You clicked" + object.get(index));
     }

 });

table.addColumn(imageColumn, columnName);

但在 Eclipse 中运行时,它不显示图像。 Web 服务器收到此错误:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 Request headers
  Host: 127.0.0.1:8888
  User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0
  Accept: image/png,image/*;q=0.8,*/*;q=0.5
  Accept-Language: en-US,en;q=0.5
  Accept-Encoding: gzip, deflate
  Referer: http://127.0.0.1:8888/abc.html?gwt.codesvr=127.0.0.1:9997
  Cookie: MYCOOKIE=htzjk7g2pva9; JSESSIONID=1xjqdxl3kuuxw; PRODUCTSERVICECOOKIE=1xjqdxl3kuuxw
  Connection: keep-alive
  Response headers
  Set-Cookie: PRODUCTSERVICECOOKIE=1xjqdxl3kuuxw;Path=/
  Content-Length: 1397
  Content-Type: text/html; charset=iso-8859-1
  [WARN] 404 - GET /contact.jpg (127.0.0.1) 1397 bytes
 Request headers
   Host: 127.0.0.1:8888
  User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0
  Accept: image/png,image/*;q=0.8,*/*;q=0.5
  Accept-Language: en-US,en;q=0.5

另外,第二个问题是把图像放在哪里,这样当我们部署最终的网络应用程序时,我们就可以轻松地管理图像。我实际上对 Eclipse 中的文件夹结构感到困惑。

在 MyProject 中,我有:
war \\\\我的项目
war \\\\WEB-INF
war \\\\MyProjet.css
war \\\\MyProjet.html

但在 MyProject 我也有包含所有 java 文件的文件夹 src
src\\\\myproject\\\\client\\\\(在客户端文件夹中,我放了"contact.jpg"
src\\\\myproject\\\\服务器

我不确定我是否将contact.jpg 放在了正确的文件夹中。另外,当我们部署我们的 webapp 时,Eclipse 会将所有图像文件迁移到这个文件夹中:-->
war \\\\myproject


如果您将图像文件放在 rc\\myproject\\public\\img\\contact.jpg 文件夹中,那么 GWT 将在编译期间将文件复制到您的 war\\gwtmodulename\\img\\contact.jpg 文件夹中,您需要使用 GWT.getModuleBaseURL()+"img"+"contact.jpg" 进行编码,因为这会为您提供图像的位置 wrt 您的 .

如果您将图像文件放在 war\\img 文件夹中,那么您需要使用 GWT.getHostPageBaseURL()+"img"+"contact.jpg" 进行编码,因为这会为您提供图像的位置 w.r.t yout http:\\\\domain\\war\\ .


要么:

  • 将您的图像放在公共路径中。公共路径中的静态资源(例如图像)会自动复制到编译器输出目录中。要在客户端代码中引用它们,您必须使它们相对于 GWT.getModuleBaseURL()

  • ClientBundle 中使用 ImageResource 并使用:

    • imageResource.getSafeUri().asString() 链,获取其已解析(安全)URI;或

    • AbstractImagePrototype.create(imageResource).getHTML() 代表整个 <img> 片段。

我已经排除了 new Image(imageResource).getUrl() 选项,因为它对您的用例毫无用处(不需要 Image 小部件)。

另外,如果你想用一个图标来装饰一个单元格,看看 IconCellDecorator,也许有点用处。