0

データテーブル内の動的画像をレンダリングするためにBalusCによって提案されたソリューションを正常に実装しました(コードはここにさらに投稿されています)。私が直面している問題はこれです:

問題

データテーブルでページネーションを使用していますが、一度も訪れたことのないページに移動すると、画像が正常にレンダリングされます。しかし、以前にアクセスしたページに戻ると、その画像の StreamedContent が返されたにもかかわらず、画像が表示されません。

コード

// ImageBean - SessionScoped        
// Get image for compound
public StreamedContent scaledImageById() {
    FacesContext context = FacesContext.getCurrentInstance();

    if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) {
        return new DefaultStreamedContent();
    } else {
        String idStr = context.getExternalContext().
                                       getRequestParameterMap().get("id");
        StreamedContent image = scaledCompoundImageMap.
                                              get(Integer.valueOf(idStr));
        return image;
    }
}


// Controller - ViewScoped
<p:dataTable id="cTable" value="#{controller.compoundList}" var="compound">
       <p:column headerText="Structure" style="text-align:center">
          <p:graphicImage id="scaledImage" 
                          value="#{imageBean.scaledImageById()}"     
                          cache="false">
                <f:param name="id" value="#{compound.id}" />
          </p:graphicImage>
       </p:column>   
  ...

そのため、ページネーターで新しいページにアクセスすると、画像が正常に表示されます。しかし、既にアクセスしたページに戻ると、画像が表示されません (scaledImageById が 2 回呼び出され、StreamedContent が正常に返されます)。

ここで他のコードが必要な場合はお知らせください。助けていただければ幸いです。ありがとう。

アブドゥル

4

1 に答える 1