FreeMarker, проблема WebWork - PullRequest
       21

FreeMarker, проблема WebWork

1 голос
/ 13 ноября 2009

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

simple.ftl:

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

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

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

1 Ответ

1 голос
/ 27 декабря 2009

Это именно то, для чего предназначен тип результата 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;
    }
}
...