Используйте сервлет хранилища документов, предоставленный 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
).Если вы распространяете контекст разговора, вероятно, вам не нужно будет передавать какой-либо параметр.Для большого набора данных может быть предпочтительным не распространять диалог и передавать параметр, чтобы выбрать данные в компоненте области запроса.