как вернуть Excel в Struts2 результат? - PullRequest
2 голосов
/ 17 июня 2009

Я пытаюсь вернуть лист Excel из моего класса действий struts2.

Я не уверен, какой тип результата я должен использовать? Кто-нибудь пытался вернуть Excel из класса действий struts2?
Я хотел бы, чтобы пользователю было представлено диалоговое окно открытия / сохранения / отмены

Ответы [ 2 ]

6 голосов
/ 25 августа 2010

Вездесущий охватил то, что вам нужно в struts.xml. Я добавляю также пример с действием:

InputStream excelStream
String contentDisposition
String documentFormat = "xlsx"

String excel() {

    ServletContext servletContext = ServletActionContext.getServletContext()
    String filePath = servletContext.getRealPath("/WEB-INF/template/excel/mytemplate.${documentFormat}")

    File file = new File(filePath)
    Workbook wb = WorkbookFactory.create(new FileInputStream(file))

    Sheet sheet = wb.getSheetAt(0)

<write to excel file>

    ByteArrayOutputStream baos = new ByteArrayOutputStream()
    wb.write(baos)
    excelStream = new ByteArrayInputStream(baos.toByteArray())
    contentDisposition = "filename=\"myfilename.${documentFormat}\""

    return SUCCESS
}

String getExcelContentType() {
    return documentFormat == "xlsx" ? "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" : "application/vnd.ms-excel"
}

Я использую модель poi: org.apache.poi.ss.usermodel.

Вы можете заменить «xlsx» на «xls», если хотите.

struts.xml:

<action name="myaction" class="com.example.MyAction" method="excel">
        <result type="stream">
            <param name="contentType">${excelContentType}</param>
            <param name="inputName">excelStream</param>
            <param name="contentDisposition">contentDisposition</param>
            <param name="bufferSize">1024</param>
        </result>
    </action>

(добавить точки с запятой и прочее для перевода в действительную Java)

5 голосов
/ 17 июня 2009

Вы можете использовать Stream Result type

Пример будет выглядеть так:

<result name="excel" type="stream">
    <param name="contentType">application/vnd.ms-excel</param>
    <param name="inputName">excelStream</param>
    <param name="contentDisposition">attachment; filename="${fileName}"</param>
    <param name="bufferSize">1024</param>
    <param name="contentLength">${contentLength}</param>
 </result>

excelStream будет методом в вашем классе действий, contentLength будет длиной потока, fileName будет получателем, который вернет имя файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...