1

Blobを使用してGoogleAppEngineに画像を保存しています。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>");
}

サーブレットコード:

        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()メソッドを使用すると、Cellのテキストデータは完全に更新されますが、画像は更新されません。URLも完全に生成されますが、セルがレンダリングされると、サーブレットへの呼び出しは再度生成されません。

サーブレットへの呼び出しを再度生成するために、誰かが何をすべきですか?

4

1 に答える 1

0

URLの最後にパラメータを追加します。ランダムなintのようなもの。ブラウザは以前と同じ画像であると想定し、キャッシュにある画像を使用するため、画像は更新されません。

Random random = new Random();
String url=GWT.getModuleBaseURL()+"fetchIcon?appId="+value.getId()+"&requestType=icon" + "&r=" + random.nextInt();
于 2011-09-09T18:10:14.610 に答える