我使用Blob在谷歌应用程序引擎中存储图像。当我使用ListDataProvider的add()方法在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());
}
}
现在当我在Blob中更新图像时,我希望相同的图像能反映在CellList的Cell中。对于单元格的更新,我使用ListDataProvider的set()方法。
使用set()方法,单元格中的文本数据得到完美更新,但图像没有得到更新。url也被完美地生成,但是一旦单元格被渲染,就不会再生成对Servlet的调用。
任何人都可以我应该做什么,这样将再次生成Servlet调用?
在url的末尾添加一个参数。就像一个随机的整型。图片不会刷新,因为浏览器认为它和以前是相同的图片,并使用缓存中的图片。
Random random = new Random();
String url=GWT.getModuleBaseURL()+"fetchIcon?appId="+value.getId()+"&requestType=icon" + "&r=" + random.nextInt();