2011-09-09 39 views
1

我使用Blob將圖像存儲在Google App Engine中。當我使用ListDataProvider的add()方法在CellList中添加新數據時,它的渲染效果非常好。以gwt更新圖像CellList

下面是AbstractCell的擴展版本:

@Override 
public void render(com.google.gwt.cell.client.Cell.Context context, 
     AppsBean value, SafeHtmlBuilder sb) { 
    String url=GWT.getModuleBaseURL()+"fetchIcon?appId="+value.getId()+"&requestType=icon"; 
    sb.appendHtmlConstant("<Table>"); 
    sb.appendHtmlConstant("<tr><td rowspan='3'>"); 
    sb.appendHtmlConstant("<img src='"+url+"' style='width : 75px ;height: 75px;' />"); 
    sb.appendHtmlConstant("</td><td>"); 
    sb.appendEscaped(value.getAppName()); 
    sb.appendHtmlConstant("</td></tr><tr><td>"); 
    sb.appendEscaped(value.getAppLink()); 
    sb.appendHtmlConstant("</td></tr><tr><td>"); 
    sb.appendEscaped(value.getAppDesc()); 
    sb.appendHtmlConstant("</td></tr>"); 
    sb.appendHtmlConstant("</Table>"); 
} 

servlet代碼:

 String appId = get(request, "appId"); 
    String requestType = get(request, "requestType"); 
    log.info("Your request for apps icon: " + appId + ", requestType: " + requestType); 
    if (requestType.equalsIgnoreCase("icon")) { 
     Apps icon = appsServiceImpl.getApp(Long.valueOf(appId)); 
     log.info("We got apps for you: " + icon); 
     if(icon != null){ 
      log.info("We got store logo for you: " + icon.getIcon()); 
      response.getOutputStream().write(icon.getIcon()); 
     } 
    } 

現在,當我更新的斑點像我一樣想在CellList的細胞中得到體現。爲了更新單元格,我使用了ListDataProvider的set()方法。

使用set()方法,Cell中的文本數據得到更新完美,但圖像沒有更新。 url也得到了完美的生成,但是一旦單元格被渲染,不會再次生成對Servlet的調用。

任何人都可以這樣做,這將再次生成對Servlet的調用?

回答

0

在url的末尾添加一個參數。像一個隨機int。 圖像未刷新,因爲瀏覽器假定它與以前的圖像相同,並使用緩存中的圖像。

Random random = new Random(); 
String url=GWT.getModuleBaseURL()+"fetchIcon?appId="+value.getId()+"&requestType=icon" + "&r=" + random.nextInt(); 
+0

謝謝我也這麼做。 – vbjain