FreeMarker, проблема WebWork

У меня есть веб-приложение, написанное с использованием freemarker, webwork и java. Теперь, когда пользователь нажимает на "getReport", java-код возвращает строковую переменную (с именем "otchet"), которая содержит весь отчет в виде простого текста и отображается следующая страница:

simple.ftl:

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

Работает нормально. Однако вместо этого я хотел бы предложить пользователю этот отчет (содержащийся в переменной "отчет") в виде текстового / простого файла.

Как я могу решить эту проблему?

1 ответ

Это именно то, для чего предназначен тип результата StreamResult.

Пример:

В вашем WebWork XML:

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

В ваших действиях:

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;
    }
}
Другие вопросы по тегам