【问题标题】:GWT, why CellTable doesn't show Image when running in Eclipse?GWT,为什么 CellTable 在 Eclipse 中运行时不显示图像?
【发布时间】:2013-04-23 16:33:44
【问题描述】:

我有代码:

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

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

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

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

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

【问题讨论】:

    标签: image gwt project directory celltable


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      要么:

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

      • ClientBundle 中使用ImageResource 并使用:

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

        • AbstractImagePrototype.create(imageResource).getHTML() 为整个&lt;img&gt; sn-p。

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

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

      【讨论】:

      • 图片的路径是从DB动态拉取的,ImageResource是固定图片的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多