2010-12-12 3 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

これはブラウザ間で一貫して起こるのですか、特定のブラウザ/バージョンと分離された動作ですか? –

+0

残念ながら、Firefox 3.6とChrome 8で起こってしまいます。 –

答えて

5

あなたは「プラグイン、その後、その後に解決「/ YourApplicationContext /ストリーム/ストリーム・テスト」の下の参照を実行するために、次のコードを使用することができます規則を使用している場合/YourApplicationContext/stream/document.txtは:contentDisposition「

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; 
    } 
} 

のノート取ってください 『』と、その値が設定されていることをに 『ファイル名=『ドキュメント.txt』』 『ドキュメント.txt』を変更するには、あなたを取得するものあなたは欲しい。

+0

注意Struts2には取得/設定が必要ありません。私は、デモのためにソースを不必要に長くすると感じています。 – Quaternion

+0

また、contentDispositionを省略してファイル名を設定すると、ファイル名はコンテンツタイプに追加されたアクションの名前になります(contentType = "text/html"の場合、 'document'という名前のアクションdocument.html、contentType = "text"、次にdocument.txt) – Quaternion

+0

答えをありがとう、しかし私はまだ少し問題があります。ファイルはブラウザでレンダリングされています(chromeとfirefoxでテスト済み)。ドンロードウィンドウを表示したかったのです。 –

0

オリジナルの注釈は結構です、それだけでタイプミスが含まれています

「contentDispostion」

を「contentDisposition」をお読みください私はこれを理解するために私の年齢を取ったので、私は、私はそれを明確にしようと思いました:-)

0

私の注釈は、基本的には同じですが、私は、ファイルの名前を設定するための基準を使用:

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

exportFilenameはGEと文字列変数ですそれは継承可能なクラスに置くこともできるので、一意のExportActionを作成し、すべてのアクションでそれを継承させることができます。

おそらく、すべてのパラメータの値を設定する変数を作成できます。

関連する問題