JSF File Download

Reading Time: < 1 minute
<h:commandLink action="#{logController.downloadMessage}">
                                    <h:outputText
                                            styleClass="fa fa-fw fa-download"/>
                                    <f:setPropertyActionListener value="#{log}"
                                                                 target="#{logController.selectedLog}"/>
                                </h:commandLink>
public void downloadMessage() throws IOException {
        logger.info("downloading the log file");
        File file = new File(searchKeyword + "_log.txt");
        FileUtils.writeStringToFile(file, selectedLog.getMessageContent(), Charset.defaultCharset());
        FacesContext facesContext = FacesContext.getCurrentInstance();
        HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
        response.setHeader("Content-Disposition", "attachment;filename=" + file.getName());
        response.setContentLength((int) file.length());
        FileInputStream input = null;
        try {
            int i = 0;
            input = new FileInputStream(file);
            byte[] buffer = new byte[1024];
            while ((i = input.read(buffer)) != -1) {
                response.getOutputStream().write(buffer);
                response.getOutputStream().flush();
            }
            facesContext.responseComplete();
            facesContext.renderResponse();
        } catch (IOException e) {
            logger.error(e.getMessage());
        } finally {
            try {
                if (input != null) {
                    input.close();
                }
            } catch (IOException e) {
                logger.error(e.getMessage());
            }
        }
    }

 

d