データテーブル内の動的画像をレンダリングするために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 が正常に返されます)。
ここで他のコードが必要な場合はお知らせください。助けていただければ幸いです。ありがとう。
アブドゥル