Tôi không biết cách tải xuống tệp CSV. CSV sẽ được tạo khi chạy. Tôi có cần lưu tệp trong thư mục tomcat WEB-INF trước không? Tôi đang sử dụng JSF 1.2.Tải xuống tệp CSV bằng cách sử dụng JSF
Nhân tiện, thành phần JSF ưu tiên cho loại công việc này là gì?
Chỉnh sửa (05.05.2012 - 15:53)
Tôi đã thử các giải pháp được nêu trong BalusC
đầu tiên của mình link, nhưng nếu tôi bấm vào CommandButton tôi nội dung của file sẽ được hiển thị trên trang web. Có thể có sự cố với số mimetype
?
xhtml-file:
<a4j:form>
<a4j:commandButton action="#{surveyEvaluationBean.doDataExport}" value="#{msg.srvExportButton}" />
</a4j:form>
đậu chính:
public String doDataExport() {
try {
export.downloadFile();
} catch (SurveyException e) {
hasErrors = true;
}
return "";
}
xuất đậu:
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");
}
}
Chỉnh sửa (05.05.2012 - 16:27)
Tôi đã giải quyết được vấn đề của mình. Tôi phải sử dụng <h:commandButton>
thay vì <a4j:commandButton>
và giờ nó hoạt động!
Tôi không nghĩ rằng mình có thể sử dụng 'PrimeFaces', vì chúng không hỗ trợ JSF 1.2 từ' PrimeFaces 2.0' khi tôi đúng? –
Đúng vậy, phiên bản JSF 1.x cổ đại sắp kết thúc, vì vậy bạn không nên mong đợi hỗ trợ thư viện thành phần mới cho nó. Chỉ cần tiếp tục với phát trực tuyến thủ công. Bạn chỉ cần lấy 'HttpServletResponse' thô bằng' ExternalContext # getResponse() 'và sau đó gọi' getOutputStream() 'thay vào đó, nhưng nó đã được phác thảo trong liên kết thứ nhất. Hoặc, tất nhiên, nâng cấp lên JSF 2. Nó cung cấp rất nhiều lợi thế hơn JSF 1.2. – BalusC
Tôi biết những bất lợi của jsf 1.2, nhưng tại thời điểm này chúng tôi không thể nâng cấp lên cấp cao hơn. Tôi đã cố gắng để hiểu liên kết đầu tiên của bạn, nhưng nó không hoạt động. Tôi đã sử dụng mimetype 'text/dấu phẩy-giá trị' tôi tìm thấy trên web, nhưng các trình duyệt (IE, FF, Chrome) không diễn giải chính xác. –