Я успешно реализовал решение, предложенное BalusC для рендеринга динамических изображений внутри таблицы данных (код размещен ниже здесь). Проблема, с которой я сталкиваюсь, заключается в следующем:
Проблема
Я использую нумерацию страниц в datatable, и когда я перехожу на страницу, которую я никогда не посещал, изображения отображаются нормально. Но когда я возвращаюсь на страницу, которую я посетил ранее, изображения не отображаются, хотя для этого изображения возвращается 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 вызывается дважды, а StreamedContent возвращается нормально).
Пожалуйста, дайте мне знать, если вам нужен какой-либо другой код здесь, и любая помощь будет высоко оценена. Спасибо.
Абдул