Pobieranie pliku CSV za pomocą JSF
Nie wiem, jak pobrać plik CSV. CSV zostanie wygenerowany w czasie wykonywania. Czy muszę najpierw zapisać plik w katalogu WEB-INF tomcat? Używam JSF 1.2.
Przy okazji, jaki jest preferowany komponent JSF dla tego rodzaju zadań?
Edytuj (05.05.2012 - 15:53)
Spróbowałem rozwiązaniaBalusC
stwierdził w swoim pierwszympołączyć, ale jeśli kliknę na przycisk polecenia, zawartość pliku zostanie wyświetlona na stronie internetowej. Może jest problem zmimetype
?
plik xhtml:
<code><a4j:form> <a4j:commandButton action="#{surveyEvaluationBean.doDataExport}" value="#{msg.srvExportButton}" /> </a4j:form> </code>
główna fasola:
<code> public String doDataExport() { try { export.downloadFile(); } catch (SurveyException e) { hasErrors = true; } return ""; } </code>
fasola eksportowa:
<code>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"); } } </code>
Edytuj (05.05.2012 - 16:27)
Rozwiązałem mój problem. Muszę użyć<h:commandButton>
zamiast<a4j:commandButton>
a teraz to działa!