1. 程式人生 > >ADF-彈窗顯示PDF方法二

ADF-彈窗顯示PDF方法二

就是建立一個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>

現在執行應用程式,呼叫彈出。