2009-11-08 85 views
0

這是我之前的問題,它沒有正確框定。Iframe沒有顯示struts action class中的對象

我在其中呼籲在SRC一個Struts2的action類一個JSP類的iframe,但不是該文件得到下載的框架內開放,

內部文件TempContentPage.jsp:

<s:form> 
<iframe id="displayFrame" src="ContentPage.action" width="1000" height="500" FRAMEBORDER="0" value="1">&nbsp;</iframe> 
</s:form> 

下面是在操作類ContentPage.java執行方法

公共字符串執行()拋出IOException異常{

Session session = SessionUtil.getSession(); 
    session.beginTransaction(); 
    ServletOutputStream out = res.getOutputStream(); 
    ContentBase cb = new ContentBase(); 


    String quer = "from ContentBase cb where cb.parentType=? AND cb.parentId=? "; 
    Query query = session.createQuery(quer); 

    query.setParameter(0, "FILE"); 
    query.setParameter(1, "1"); 

    list = (ArrayList) query.list(); 

    if (null != list && !((java.util.ArrayList) list).isEmpty()) { 
     cb = (ContentBase) ((java.util.ArrayList) list).get(0); 
    } 

    docContent = cb.getFile(); 
    res.reset(); 
    res.setContentType("application/msword"); 
    res.setHeader("Content-disposition", "inline; filename=\"scovr.doc\""); 


    try{ 
    InputStream in = docContent.getBinaryStream(); 

    //InputStream iStream = new ByteArrayInputStream (docContent.getBytes(0, (int) docContent.length())); 

    int length = (int) docContent.length(); 
    int bufferSize = 1024; 
    byte[] buffer = new byte[bufferSize]; 
     while ((length = in.read(buffer)) != -1) { 
      out.write(buffer, 0, length); 

     } 

    player.setIsRead(true); 

    in.close(); 

    }catch(Exception e){ 

     e.printStackTrace(); 
    } 

    out.flush(); 
    return SUCCESS; 
} 

這裏是struts.xml中映射

<action name="ContentPage" class="com.zoran.action.ContentPage"> 
      <result name="success" type="stream"> 
      <param name="contentType">application/msword</param> 
      <param name="inputName">in</param> 
      <param name="bufferSize">1024</param> 
      <param name="contentDisposition">inline</param> 
      </result> 

      <result name="error" >/pages/ContentPage.jsp</result> 
      <result name="input" >/pages/ContentPage.jsp</result> 
</action> 

我想打開的iframe範圍內的文件,請幫我(我從Balusc有價值的投入),因此改變在此代碼:)。

感謝, 阿迪亞

回答

1

啊,你使用Struts。然後我建議尋找真正的Struts文件下載示例here

但是,如果它支持以內聯方式打開MS Word文檔,則您還依賴於使用的客戶端(webbrowser)。我從來沒有見過也沒有嘗試過,但是認爲(並且不會感到驚訝)如果支持僅限於MSIE。更好地使用PDF代替,有非常廣泛的瀏覽器支持來顯示它內聯。您可以使用iTextOOo將DOC轉換爲PDF。

或者如果客戶端的意圖是需要能夠編輯文檔並保存回服務器,那麼以內聯方式打開它就沒有任何意義,並且只會讓客戶更加困惑,因爲存在沒有辦法在服務器端「保存」完全相同的文檔,而不是將其保存到本地磁盤文件系統,然後再手動上傳到服務器端。

+0

非常感謝Balusc。即使在IE中它沒有得到渲染,它只是彈出一個對話框詢問是否保存或打開框。如果它只是在IE本身工作,我會很高興。此外,還沒有向用戶提供可編輯選項的意圖。用戶在另一個頁面上傳一個.doc文件,而不同的用戶在上面的頁面訪問它。 – 2009-11-09 05:37:08

+0

然後,最好的選擇是將其轉換爲PDF或與下載鏈接/按鈕而不是iframe一起生活。祝你好運。 – BalusC 2009-11-09 12:44:23