2013-04-23 67 views
0

我的代碼:GWT,爲什麼CellTable在Eclipse中運行時不顯示圖像?

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的,我有:
戰爭\ myproject的
戰爭\ WEB-INF
戰爭\ MyProjet.css
戰爭\ MyProjet.html

但在MyProject的我也有文件夾的src其中包含所有的java文件
的src \ MyProject的\客戶\(客戶端文件夾中,我把 「contact.jpg」
的src \ MyProject的\服務器

我不知道如果我把接觸。 JPG在正確的文件夾中。此外,當我們部署web應用程序我們將Eclipse中的所有圖像文件遷移到這個文件夾: - >
戰爭\ myproject的

回答

1

如果放在rc\myproject\public\img\contact.jpg文件夾中的圖像文件,然後GWT將文件複製到文件夾war\gwtmodulename\img\contact.jpg編譯過程中,你將需要使用GWT.getModuleBaseURL()+"img\"+"contact.jpg"作爲,讓你的圖像的位置w.r.t您http:\\domain\war\gwtmodulename編碼。

如果您將圖像文件放在war\img文件夾中,那麼您需要使用GWT.getHostPageBaseURL()+"img\"+"contact.jpg"進行編碼,因爲這會給出圖像的位置w.r.t yout http:\\domain\war\

1

或者:

  • 把你的形象在公共路徑。 public path中的靜態資源(如圖像)會自動複製到編譯器輸出目錄中。要在客戶端代碼中引用它們,您必須使它們相對於GWT.getModuleBaseURL()

  • 使用一個ImageResource一個ClientBundle內,並使用任一:

    • imageResource.getSafeUri().asString()鏈,以獲得其解析(安全)URI;或

    • AbstractImagePrototype.create(imageResource).getHTML()整個<img>代碼段。

我已經排除了new Image(imageResource).getUrl()選擇,因爲它是無用的你的使用情況(不需要的Image小部件)。

另外,如果你想裝飾一個單元格使用圖標,看看IconCellDecorator,也許某種程度上有用。

+1

圖像的路徑是從數據庫動態拉取的,而ImageResource是用於固定圖像的。 – Tom 2013-04-23 17:42:47