栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

导出到Excel JSF和PrimeFaces

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

导出到Excel JSF和PrimeFaces

有两个问题。

第一个问题是

<p:commandButton>
默认情况下发送的Ajax请求。此请求由Javascript代码触发。但是,Javascript无法对包含文件下载的响应进行任何操作。由于安全限制,Javascript无法生成“
另存为” 对话框或其他内容。该响应基本上被完全忽略。

您需要添加

ajax="false"
<p:commandButton>
关闭Ajax,以便该按钮触发正常的同步HTTP请求,或者您需要将其替换为standard
<h:commandButton>

<p:commandButton ajax="false" ... />

要么

<h:commandButton ... />

第二个问题是您的servlet根本不将Excel文件写入响应,而是写入存储在服务器工作目录中的本地文件。基本上,HTTP响应不包含 任何内容
。您需要传递

HttpServletResponse#getOutputStream()
给该
WorkBook#write()
方法。

workbook.write(response.getOutputStream());

毫无关系,我想知道servlet在这里有什么用。您是否想在JSF之外重用它?如果不是这样,您根本不必调度到servlet,而只需在bean的action方法中执行相同的代码即可。空

catch
块也不是很好。我只是将其声明为
throws
in方法或至少将其重新抛出为
newFacesException(e)


*根据您似乎对servlet完全不感兴趣的注释进行 *更新 。这是一个小小的重写,说明了如何使用JSF操作方法以编程方式发送Excel文件。

public void getReportData() throws IOException {    HSSFWorkbook workbook = new HSSFWorkbook();    HSSFSheet sheet = workbook.createSheet();    HSSFRow row = sheet.createRow(0);    HSSFCell cell = row.createCell(0);    cell.setCellValue(0.0);    FacesContext facesContext = FacesContext.getCurrentInstance();    ExternalContext externalContext = facesContext.getExternalContext();    externalContext.setResponseContentType("application/vnd.ms-excel");    externalContext.setResponseHeader("Content-Disposition", "attachment; filename="my.xls"");    workbook.write(externalContext.getResponseOutputStream());    facesContext.responseComplete();}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/413906.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号