我使用primefaces擴展documentViewer來顯示pdf。這些文件是流式傳輸的,這意味着後臺bean提供了一個org.primefaces.model.DefaultStreamedContent
的實例。如果顯示一個大的pdf文件,直到觀看者顯示一些內容需要一些時間。在PF擴展網站的展示中,documentViewer
在查看器按鈕欄下方顯示一個加載欄。不幸的是,這並沒有顯示在我的情況。在陳列櫃中沒有使用DefaultStreamContent
。這是要歸檔的網址。也許我必須設置流媒體內容的總大小?這可能與DefaultStreamedContent
?Primefaces擴展documentViewer顯示下載狀態
2
A
回答
2
也許我必須設置總規模的流媒體內容
是的!如果事先知道響應內容的長度,客戶端只能計算進度。在JSF中,您可以通過ExternalContext#setResponseContentLength()
設置響應內容長度。
前提是你要返回StreamedContent
,這裏是你如何能做到這一點(基於AO Display dynamic image from database with p:graphicImage and StreamedContent):
@ManagedBean
@ApplicationScoped
public class PdfManager {
@EJB
private PdfService service;
public StreamedContent getContent() throws IOException {
FacesContext context = FacesContext.getCurrentInstance();
if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) {
return new DefaultStreamedContent();
} else {
Pdf pdf = service.generateItSomehow();
context.getExternalContext().setResponseContentLength(pdf.getLength());
return new DefaultStreamedContent(pdf.getInputStream());
}
}
}
相關問題
- 1. MySQL「擴展」與「顯示狀態」
- 2. 使進度條顯示下載狀態
- 3. PrimeFaces擴展
- 4. 如何下載PrimeFaces展櫃?
- 5. 延遲加載展示primefaces
- 6. c#從sql數據庫下載文件,顯示下載狀態
- 7. 顯示載入狀態
- 8. git狀態顯示文件夾 - 沒有擴展
- 9. Primefaces TreeNode不擴展
- 10. Primefaces擴展警告
- 11. 確定擴展狀態
- 12. Firefox擴展:共享狀態
- 13. 動態擴展形狀
- 14. 如何在狀態爲up的狀態下顯示SimpleButton狀態
- 15. 在DocumentViewer中顯示html MemoryStream
- 16. WPF DocumentViewer不顯示文檔
- 17. 如何在iOS中顯示PDF下載的加載狀態
- 18. 如何在狀態欄下顯示下載進度
- 19. MySQL擴展顯示
- 20. iPhone:下載圖像然後顯示在UIImageView與@ 2x擴展
- 21. 顯示並下載帶擴展名的文本文件
- 22. 春天MVC下載文件沒有顯示擴展
- 23. 雙態按鈕:顯示當前狀態或下一個狀態?
- 24. 動態加載php擴展
- 25. 使用primefaces擴展(inputNumber)
- 26. 下載和Safari擴展
- 27. Chrome擴展程序:下載
- 28. 顯示承諾的加載狀態
- 29. 用ajax調用顯示加載狀態
- 30. 按鈕不顯示按下的狀態?
*?「也許我必須設置總規模的流媒體內容」 *是!在'response.setContentLength(contentLength)'的味道。然後客戶可以計算進度。 – BalusC
好吧,沒有想過這個。遺憾的是我無法驗證它,因爲我發現我們的後端模型不能提供可靠的尺寸。如果大小設置得太大,查看器將顯示PDFException。 – opfau
它必須是確切的大小(即字節數量)。你的意思是說你的PDF是基於任意數據自動生成的,因此不會(暫時)靜態存儲在某些數據存儲中? – BalusC