0

我有代码:

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 服务器收到此错误:

 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

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

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

但在 MyProject 我也有文件夹 src ,其中包含所有 java 文件
src\myproject\client\ (在客户端文件夹中,我放了“contact.jpg”
src\myproject\server

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

4

2 回答 2

1

任何一个:

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

或者

  • ImageResource在 a中使用 anClientBundle并使用:

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

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

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

此外,如果您想使用图标装饰单元格,请查看IconCellDecorator,也许会有用。

于 2013-04-23T17:33:33.313 回答
1

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

如果您将图像文件放在war\img文件夹中,那么您需要使用代码来GWT.getHostPageBaseURL()+"img\"+"contact.jpg"为您提供图像 wrt yout 的位置http:\\domain\war\

于 2013-04-24T08:49:41.817 回答