JDK 1.6, JSF 2.1, PrimeFaces 2.2.1, POI 3.2, 아파치 톰캣 사용 7엑셀 JSF로 내보내기 및 PrimeFaces
나는 기반으로 엑셀 파일의 다운로드를 허용하도록 설정에 서블릿을 시도하고있다 사용자 선택. 엑셀 문서는 런타임에 생성됩니다.
오류가 없으며 코드가 서블릿에 들어갑니다.
버튼을 클릭해도 아무런 변화가 없습니다. Excel 문서의 데이터에서 순서 및 사용자 지정 서식을 사용해야하므로 PrimeFaces에서 사용하는 데이터 테이블 내보내기를 사용하지 않습니다.
ExportExcelReports.java
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename=\"my.xls\"");
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet();
HSSFRow row = sheet.createRow(0);
HSSFCell cell = row.createCell(0);
cell.setCellValue(0.0);
FileOutputStream out = new FileOutputStream("my.xls");
workbook.write(out);
out.close();
}
ProjectReportBean.java
public void getReportData() {
try {
FacesContext ctx = FacesContext.getCurrentInstance();
ExternalContext ectx = ctx.getExternalContext();
HttpServletRequest request = (HttpServletRequest) ectx.getRequest();
HttpServletResponse response = (HttpServletResponse) ectx.getResponse();
RequestDispatcher dispatcher = request.getRequestDispatcher("/ExportExcelReports");
dispatcher.forward(request, response);
ctx.responseComplete();
} catch (Exception e) {}
}
index.xhtml
<h:form id="reportsForm">
<h:outputLabel for="report" value="Reports" /><br />
<h:selectOneMenu id="report" value="#{projectReportBean.selectedReport}" required="true" requiredMessage="Select Report">
<f:selectItem itemLabel="---" noSelectionOption="true" />
<f:selectItems value="#{projectReportBean.reports}" />
</h:selectOneMenu>
<p:commandButton action="#{projectReportBean.getReportData}" value="Export" update="revgrid" />
</h:form>
저는 서블릿을 사용하고 싶지 않습니다. 나도 그랬다고 생각 했어. 나는이 일을 얻은 후에 도전적으로 변화를 주시한다. –
이 경우 다시 쓰기 제안에 대한 대답 업데이트를 확인하십시오. 'ExternalContext'는 많은 위임 메소드를 가지고 있습니다. 그들을 사용하십시오. http://download.oracle.com/javaee/6/api/javax/faces/context/ExternalContext.html 궁극적으로 JSF 코드에서 ** zero **'javax.servlet' 가져 오기로 끝내기를 원합니다. – BalusC
그냥 서블릿없이 일하고있어. 정말 도움을 주셔서 감사합니다. –