Как сделать экземпляр лица context

Я использую Springbatch для вызова отчета о яшме с использованием JSF. Проблема в том, что при вызове метода FaceContext всегда имеет значение null, поэтому я могу получить сеанс. Для различных проблем, которые я прочитал, я понимаю, что проблема в том, что пакетный процесс не находится в жизненном цикле JSF. КАК я могу создать экземпляр FaceContext, чтобы я мог получить информацию о сеансе? Я пытаюсь сделать FacesServlet, но я не уверен, в какой момент я могу позвонить и как получить информацию о запросе и ответе.

  HttpServletResponse httpServletResponse = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
        httpServletResponse.addHeader("Content-disposition", "attachment; filename=" + nombreReporte + ".pdf");
        ServletOutputStream servletOutputStream = httpServletResponse.getOutputStream();
        JasperExportManager.exportReportToPdfStream(jasperPrint, servletOutputStream);
        FacesContext.getCurrentInstance().responseComplete();

2 ответа

Самый старый трюк книги. Смотрите: Доступ к FacesContext из сервлета

Код, который я публикую, - это тот код, который я использую для генерации JasperReports из моего управляемого компонента, и он работает:

      public ServletContext getContext() {
        return (ServletContext)getFacesContext().getExternalContext().getContext();
    }

    public HttpServletResponse getResponse() {
        return (HttpServletResponse)getFacesContext().getExternalContext().getResponse();
    }

    public static FacesContext getFacesContext() {
        return FacesContext.getCurrentInstance();
    }

    public void generate() {
        HttpServletResponse response =           (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();
        ServletOutputStream outStream;

        try {
            outStream = response.getOutputStream();
        } catch (IOException e) {
            _logger.severe("IOException getting outputStream during report generation!!", e);
            e.printStackTrace();
        }
        ServletContext context = getContext();
        InputStream fs = context.getResourceAsStream("/Reports/" + jrxml);

//Following there is a lot of code for generating my custom reports
   ........................

//At the end
   FacesContext.getCurrentInstance().responseComplete();
}
Другие вопросы по тегам