[英]Primefaces dynamic image in datatable using pagination
我已經成功實現了BalusC建議的解決方案,用於在數據表中渲染動態圖像(代碼在此處發布)。 我面臨的問題是:
問題
碼
// 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返回的很好)。
如果您在這里需要任何其他代碼,請告訴我,我們將不勝感激。 謝謝。
阿卜杜勒
在HTML方面,您具有img元素:
<img src="some_url?id=xyz"/>
如果圖像存儲在數據庫中並且從未更改(上載新圖像會在您的實體中創建新的圖像ID),則可以為圖像創建自定義servlet,從而獲得更大的靈活性和性能。
1)創建servlet並將其綁定到“ some_url”
2)在servlet中,從數據庫(或其他任何東西)讀取圖像
3)設置標頭,最重要的內容類型和內容長度以及緩存標頭
4)將內容寫入輸出流
加號的是,如果您具有恆定的圖像URL和良好的緩存策略,則瀏覽器將從緩存中獲取圖像-不必每次都調用Bean。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.