2009-11-13 10 views
1

J'ai une application web écrite en utilisant Freemarker, Webwork et Java. Maintenant, lorsque l'utilisateur clique sur « getReport », le code java retourne la variable de chaîne (appelée « Otchet ») qui contient l'ensemble du rapport en texte brut et la page suivante est affichée:FreeMarker, WebWork Problème

simple.ftl:

<#if (otchet?exists)> 
    ${otchet} 
<#else> 
    <@ww.text name="report.none"/> 
</#if> 

Cela fonctionne bien. Cependant, je voudrais plutôt proposer à l'utilisateur ce rapport (contenu dans la variable "otchet") en téléchargement texte/fichier.

Comment puis-je résoudre ce problème?

Répondre

1

C'est exactement le but du type de résultat StreamResult.

Exemple:

Dans votre XML WebWork:

<result name="download" type="stream"> 
    <param name="contentDisposition">filename=report.txt</param> 
    <param name="contentType">text/plain;charset=UTF-8</param> 
    <param name="inputName">inputStream</param> 
    <param name="bufferSize">1024</param> 
</result> 

Dans votre action:

public InputStream getInputStream() { 
    try { 
     return new ByteArrayInputStream(getOtchet().getBytes("UTF-8")); 
    } 
    catch (UnsupportedEncodingException ex) { 
     // Shouldn't happen with UTF-8. 
     ex.printStackTrace(); 
    } 
} 

public String doDownload() { 
    if (SUCCESS.equals(execute()) { 
     return "download"; 
    } 
    else { 
     return ERROR; 
    } 
}