Я не знаю, как загрузить CSV-файл. CSV будет сформирован во время выполнения. Нужно ли сначала сохранить файл в каталоге tomcat WEB-INF? Я использую JSF 1.2.Загрузка CSV-файла с использованием JSF
Кстати, какой предпочтительный компонент JSF для такого рода задач?
Edit (05.05.2012 - 15:53)
Я попробовал решение BalusC
заявил в своем первом link, но если я нажимаю на моем CommandButton содержимое файла отображается на веб-странице. Может быть, проблема с mimetype
?
-файл XHTML:
<a4j:form>
<a4j:commandButton action="#{surveyEvaluationBean.doDataExport}" value="#{msg.srvExportButton}" />
</a4j:form>
главный боб:
public String doDataExport() {
try {
export.downloadFile();
} catch (SurveyException e) {
hasErrors = true;
}
return "";
}
экспорт фасоли:
public void downloadFile() throws SurveyException {
try {
String filename = "analysis.csv";
FacesContext fc = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) fc.getExternalContext().getResponse();
response.reset();
response.setContentType("text/comma-separated-values");
response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
OutputStream output = response.getOutputStream();
// writing just sample data
List<String> strings = new ArrayList<String>();
strings.add("filename" + ";" + "description" + "\n");
strings.add(filename + ";" + "this is just a test" + "\n");
for (String s : strings) {
output.write(s.getBytes());
}
output.flush();
output.close();
fc.responseComplete();
} catch (IOException e) {
throw new SurveyException("an error occurred");
}
}
Edit (05.05.2012 - 16:27)
Я решил свою проблему. Я должен использовать <h:commandButton>
вместо <a4j:commandButton>
, и теперь он работает!
Я не думаю, что я могу использовать 'PrimeFaces', потому что они не поддерживают JSF 1.2 с' PrimeFaces 2.0', когда я прав? –
Правильно, древний JSF 1.x близок к концу жизни, поэтому вы не должны ожидать поддержки новой библиотеки компонентов. Просто продолжайте его вручную. Вам нужно будет только захватить необработанный «HttpServletResponse» с помощью 'ExternalContext # getResponse()', а затем вызывать его 'getOutputStream()', но это уже указано в 1-й ссылке. Или, конечно, перейти на JSF 2. Он предлагает так много преимуществ перед JSF 1.2. – BalusC
Я знаю недостатки jsf 1.2, но на данный момент мы не можем перейти на более высокий уровень. Я попытался понять вашу первую ссылку, но она не работает. Я использовал mimetype 'text/comma-separated-values', которые я нашел в Интернете, но браузеры (IE, FF, Chrome) не интерпретируют его правильно. –