Я хочу скачать файл документа по строкам, щелкнув по элементам данных, доступным для сравнения. Я попытался вызвать действие из Бина, используя ajax, например:
<p:dataTable
id="docId"
value="#{testBean.document}"
var="doc"
selectionMode="single"
selection="#{testBean.selectedDoc}"
>
<p:ajax event="rowSelect" listener="#{testBean.actionDownload}"/>
<p:column>
...
</p:column>
...
</p:dataTable>
Но следующий код не выполняет то, что я хочу. Логика c моего действия верна. Но похоже, что загружаемый документ не работает с ajax Запросом. Реакции не происходит, и загрузка не выполняется.
public String actionDownload() {
try {
FacesContext facesContext = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
StringBuffer contentDisposition = new StringBuffer();
contentDisposition.append("attachment;");
contentDisposition.append("filename=\"");
contentDisposition.append(name);
contentDisposition.append("\"");
response.reset();
response.setContentType("application/x-download");
response.setHeader("Content-Disposition", contentDisposition.toString());
ServletOutputStream out = response.getOutputStream();
response.setContentType("application/x-download");
out.write(output);
out.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
FacesContext.getCurrentInstance().responseComplete();
return null;
}
Есть ли альтернатива для загрузки файла, нажав на строку данных?