2010-12-12 63 views
5

夥計們,我無法在網上清楚地找到這些信息。我有一個操作,我正在生成一個文本文件,但總是以「generatePDF.action」文件的形式出現在客戶端。我希望它顯示爲一個receipt.txt文件。如何在Struts2中定義StreamResult的輸出名稱?

這裏是我的註解:

@Action(value = "/generateTXT", 
    results = { 
     @Result(name = "ok", type = "stream", 
     params = {"inputName", "inputStream", 
        "contentType", "application/octet-stream", 
        "contentDispostion", "attachment;filename=receipt.txt"}) 
    }) 
+0

這是否在瀏覽器中一致發生,還是孤立於特定瀏覽器/版本的行爲? – 2010-12-15 13:35:37

+0

不幸的是,它發生在Firefox 3.6和Chrome 8上 – 2010-12-16 03:36:36

回答

5

如果您正在使用的約定插件然後讓使用下面的代碼爲「/ YourApplicationContext /流/流測試」下引用的運行,然後解析爲「 /YourApplicationContext/stream/document.txt「:

package struts2.stream; 

import com.opensymphony.xwork2.ActionSupport; 
import java.io.InputStream; 
import java.io.StringBufferInputStream; 
import org.apache.struts2.convention.annotation.Result; 


@Result(name = ActionSupport.SUCCESS, type = "stream", params = 
{ 
    "contentType", 
    "text/hmtl", 
    "inputName", 
    "inputStream", 
    "contentDisposition", 
    "filename=document.txt" 
}) 
public class StreamTestAction extends ActionSupport{ 
    public InputStream inputStream; 

    @Override 
    public String execute(){ 
    inputStream = new StringBufferInputStream("Hello World! This is a text string response from a Struts 2 Action.");  
    return SUCCESS; 
    } 
} 

請注意一下‘contentDisposition’和它的價值已經被設置爲‘文件名=‘文檔.txt’’改變‘文檔.txt’讓你什麼你要。

+0

注意Struts2不需要獲取/設置我覺得它會使源不必要地延長演示。 – Quaternion 2010-12-15 23:59:06

+0

另請注意,如果省略contentDisposition來設置文件名,則文件名將成爲附加內容類型的操作的名稱(在contentType =「text/html」的情況下以及名爲「document」的操作)會得到document.html,contentType =「文本」,然後document.txt) – Quaternion 2010-12-16 00:02:42

+0

感謝您的答案,但我仍然有一個小問題。該文件正在瀏覽器上呈現(在Chrome和Firefox上測試)。我想顯示donwload窗口。 – 2010-12-16 03:36:17

0

原來的註釋是好的,它僅包含一個錯字:

「contentDispostion」應改爲「contentDisposition」

我花了年齡想出解決辦法,所以我想我會說清楚:-)

0

我的註釋是基本相同的,但我用了一個參考設置文件名:

@Result(name="export", type="stream", 
    params={ "contentType", "application/octet-stream", 
    "inputName", "fileInputStream", 
    "contentDisposition", "attachment;filename=%{exportFilename}", 
    "bufferSize", "4096"}) 

exportFilename是與GE一個字符串變量tter和setter,它也可以放在一個可繼承的類中,因此可以創建一個唯一的ExportAction並使所有操作擴展它。

可能您可以創建變量來設置所有參數的值。

相關問題