ADF-彈窗顯示PDF方法二
阿新 • • 發佈:2019-02-08
就是建立一個servlet將檔案解析為輸出流,該輸出流將用於進一步顯示檔案內容。
要建立servlet,請右鍵單擊viewController專案,選擇New ---> From Gallery - > Web Tier - > Servlet
在JDeveloper您可以建立一個HTTP servlet非常容易通過New Gallery。 我決定呼叫PreviewFileServlet 實際上是一個相當這個servlet的描述性名稱。
我接受預設servlet對映,這意味著所有請求URL中包含“/ previewfileservlet”將呼叫servlet。 “建立servlet”嚮導的JDeveloper將確保servlet及其對映新增到web.xml應用程式的。
servlet將檔名形成一個請求引數。 所以在servlet我能得到這個值通過呼叫getParameter請求。
String requestedFile = request.getParameter("name");
用這個引數值,檔案路徑(這篇文章我硬編碼)我現在能夠建立一個新檔案物件。
// I want to invoke a pdf that is located on the machine where the application is running this.filePath = "C:\\JDeveloper\\mywork\\11gR2\\showPdfInPopup\\ViewController\\public_html\\WEB-INF\\pdf-docs"; // Decode the file name (might contain spaces and on) and prepare file object. File file = new File(filePath, URLDecoder.decode(requestedFile, "UTF-8"));
下一步是啟動servlet響應:
response.reset();
response.setBufferSize(DEFAULT_BUFFER_SIZE);
response.setContentType(contentType);
response.setHeader("Content-Length", String.valueOf(file.length()));
response.setHeader("Content-Disposition", "filename=\"" + file.getName() + "\"");
現在最後的檔案並將它寫入響應。
try { // Open streams. input = new BufferedInputStream(new FileInputStream(file), DEFAULT_BUFFER_SIZE); output = new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE); // Write file contents to response. byte[] buffer = new byte[DEFAULT_BUFFER_SIZE]; int length; while ((length = input.read(buffer)) > 0) { output.write(buffer, 0, length); }
如何確保servlet呼叫:
還記得我之前使用servlet對映嗎? 現在我將使用這個確保呼叫servlet包含iframe的每次開啟彈出。 我只是確保thate iframe的來源包含servletmapping我使用的路徑。 我也新增一個“name”請求引數並將其值設定為一個值(在本例中),我從一個受管bean(第7行)。
<af:popup id="popupFileSpecs" animate="default"
contentDelivery="lazyUncached">
<af:panelWindow id="pw1" modal="true"
title="Extra information for your flight"
contentHeight="625" contentWidth="700" resize="on">
<af:inlineFrame id="if1" shortDesc="This is an inline frame"
source="/previewfileservlet?name=#{pageFlowScope.GeneralBean.pdfUrl}"
styleClass="AFStretchWidth" inlineStyle="height:600px;>
</af:inlineFrame>
</af:panelWindow>
</af:popup>
現在執行應用程式,呼叫彈出。