2010-12-12 8 views
5

Çocuklar, bu bilgiyi açıkça web'de bulamıyorum. Bir eylemim var ve bir metin dosyası oluşturuyorum, ancak her zaman istemciye "generatePDF.action" dosyası olarak görünüyor. Bir receipt.txt dosyası olarak gösterilmesini istiyorum. İşte Struts2'de bir StreamResult'un çıkış adını nasıl tanımlayabilirim?

benim şerhleridir:

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

Bu, tarayıcılar arasında tutarlı bir şekilde mi gerçekleşir veya belirli bir tarayıcıya/sürüme yalıtılmış davranış mı? –

+0

Ne yazık ki, Firefox 3.6 ve Chrome 8 –

cevap

5

"plug-in daha sonra giderir "/ YourApplicationContext/dere/stream-testi" altında referans ishal için aşağıdaki kodu kullanmanızı sağlar kuralları kullanıyorsanız /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; 
    } 
} 

dikkate alınız '' ve onun değerini kurulduğunu için 'dosya adı = 'belge.txt'' 'document.txt' değişen size ne alır İstediğiniz. Orijinal açıklama gayet

+0

adresinden memnun kaldık. Not Struts2'nin get/set'e ihtiyacı yoktur. Kaynakların gösterim için gereksiz yere uzun sürdüğünü hissediyorum. – Quaternion

+0

Ayrıca, dosya adını ayarlamak için contentDisposition'ı bırakırsanız, dosya adı, içerik türüne eklenen eylemin adı olur (contentType = "text/html" durumunda) ve 'document' adında bir eylem document.html, contentType = "text" sonra document.txt alırdı) – Quaternion

+0

Cevabınız için teşekkürler, ama hala küçük bir sorunla yaşıyorum. Dosya tarayıcıda oluşturulmaktadır (krom ve firefox üzerinde test edilmiştir). Donwload penceresini görüntülemek istedim. –

0

, sadece bir yazım hatası içerir:

"contentDispostion" Ben bu anlamaya bana yaş aldı "contentDisposition"

okumalı, bu yüzden bunu açıkça yapıyorum düşündüm :-)

0

My açıklama temelde aynıdır, ancak dosyanın adını ayarlamak için bir başvuru kullandı:

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

exportFilename ge ile string değişkendir tter ve setter ve aynı zamanda bir kalıtsal sınıfa yerleştirilebilir, bu yüzden eşsiz bir ExportAction yaratmak ve tüm eylemleri genişletmek mümkündür.

Muhtemelen, tüm parametrelerin değerlerini ayarlamak için değişkenler oluşturabilirsiniz.