Генерация и загрузка файла с помощью шва Jboss - PullRequest
1 голос
/ 27 мая 2011

Мне нужно добавить функцию экспорта в существующее веб-приложение, используя шов. Цель состоит в том, чтобы экспортировать результаты поиска в CSV-файл. У меня нет проблем с генерацией CSV, но я не знаю, как отправить CSV обратно пользователю. Я не хочу хранить CSV на сервере, потому что это будет пространство хранения с талией. Как я могу добиться этого в шве jboss?

Ответы [ 2 ]

5 голосов
/ 29 мая 2011

Используйте сервлет хранилища документов, предоставленный Seam.

Почти копируя и вставляя из справочного документа, объявите сервлет в web.xml следующим образом:

<servlet>
    <servlet-name>Document Store Servlet</servlet-name>
    <servlet-class>org.jboss.seam.document.DocumentStoreServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>Document Store Servlet</servlet-name>
    <url-pattern>/seam/docstore/*</url-pattern>
</servlet-mapping>

Затем создайте export.xhtml файл только с тегом <s:resource>:

<s:resource xmlns="http://www.w3.org/1999/xhtml"
            xmlns:s="http://jboss.com/products/seam/taglib"
            data="#{myComponent.csvData}"
            contentType="application/vnd.ms-excel"
            fileName="#{myComponent.csvFileName}"/>

Создать ссылку для загрузки файла на страницу с помощью <s:download>:

<s:download src="/csv/export.xhtml">
    <h:outputText value="Download CSV"/>
    <f:param name="param1" value="somevalue"/>
    <f:param name="param2" value="someOtherValue"/>
</s:download>

Наконец, внедрите getCsvData() и getCsvFileName() методов в вашем компоненте:

// could be byte[], File or InputStream
public InputStream getCsvData() {
    // generate data to be downloaded
}

public String getCsvFileName() {
   return "myfile.csv";
}

Обратите внимание, что <s:download> распространяет диалог (если вы не установили propagation=none).Если вы распространяете контекст разговора, вероятно, вам не нужно будет передавать какой-либо параметр.Для большого набора данных может быть предпочтительным не распространять диалог и передавать параметр, чтобы выбрать данные в компоненте области запроса.

0 голосов
/ 27 мая 2011

Существует несколько способов:

1) Проверьте документы Seam на информацию об использовании Seam-Excel для программного создания файла, а затем запишите его, используя набор MIME-типов для CSV - это всеподробно описано в документации.

Однако я не смог заставить это работать в последней версии Seam, так как для этого требуется объект ответа, который раньше был доступен из контекста Seam, но теперь возвращает только ноль.

2) Кодируйте нужный CSV-файл в виде шаблона xhtml в Excel (см. Документацию и примеры проектов Seam) и просто выводите его как обычный, используя тег.

Я делаю это регулярно, и это работаетхорошо, исключите ограничение, что вы не можете предоставить имя файла.

HTH.

...