Обработка ошибок при загрузке файла Primefaces - PullRequest
3 голосов
/ 07 апреля 2011

Как обработать ошибку с помощью простого файла filedownload

<p:fileDownload value="#{testBean.file}" /> 

TestBean.java

    public StreamedContent getFile() {  
    if(selectedReport ==null){
        FacesContext.getCurrentInstance().addMessage(.."Please select a file");
        return null;//What to do here
    }
    InputStream inps =  ReportGenerator.getPDF(selectedReport);
    return new DefaultStreamedContent(inps, "application/pdf", "report.pdf"); 
    }

Ответы [ 3 ]

0 голосов
/ 15 апреля 2011

Это помогло http://forum.primefaces.org/viewtopic.php?f=3&t=8263

<p:commandButton    ajax="false"
                    value="Download Detailed Report"
                    actionListener="#{reportBean.generateDetailedReport}">

    <p:fileDownload value="#{reportBean.detailedReport}"/>

</p:commandButton>
public void generateDetailedReport(ActionEvent ae) {

    ......

    reportStream = ExcelReport.generate(reportList);

    if (reportStream == null) {

        FacesUtil.addError("Error generating report");

        throw new AbortProcessingException();
    }
}

public StreamedContent getDetailedReport() {

    return new DefaultStreamedContent(reportStream, "application/xls", "report.xls"); 
}
0 голосов
/ 27 сентября 2012

Лучше использовать получить все исключения в одном лайке;

} catch (Exception e) {
        handleError(e);
    }

метод handleError;

private void handleError (Throwable t) {

    try {
        throw t;
    } catch (AccessException ae) {
        FacesUtil.setErrorMessage("CCCCCCC");           
    } catch (SQLException sqle) {
        FacesUtil.setErrorMessage("CCCCCCC");           
    } catch (ConnectException ce) {
        FacesUtil.setErrorMessage("CCCCCCC");           
    } catch (RemoteException re) {
        FacesUtil.setErrorMessage("CCCCCCC");           
    } catch (NotBoundException nbe) {
        FacesUtil.setErrorMessage("CCCCCCC");           
    } catch (IOException ioe) {
        FacesUtil.setErrorMessage("CCCCCCC");           
    } catch (IllegalArgumentException iae) {
        FacesUtil.setErrorMessage("CCCCCCC");           
    } catch (Throwable tt) {
        FacesUtil.setErrorMessage("CCCCCCC");           
    }

    FacesUtil.completeResponse();
}
0 голосов
/ 08 апреля 2011

Если вы имеете в виду обработать ошибку под , чтобы показать html-сообщение пользователю , то вы должны поместить код, который может вызвать исключение, в try ... catch Блок , а блок catch изменяет тип содержимого обратно на text/html и отображает ошибку так, как вы хотите.

Но поскольку тип содержимого добавлен в DefaultStreamedContent, возможно, только перенаправление может решить эту проблему.

...