Как сделать экземпляр лица 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();
}