1、在ftl页面的搜索部分添加导出的方法按钮
<input type="button" id="exportButton" class="formButton" value="Excel 导出" hidefocus />
2、在js中定义searchButton,
然后在后面添加exportButton 与searchButton的click事件方法,还要submit listForm ,这样输入搜索框中的内容才会提交到导出Excel 的Action方法中,才不会出现乱码。
注意:导出方法执行后,要再次回到list方法上,不然点页码时会再次执行导出方法
相关js片段如下:
<script type="text/javascript">
$().ready(function() {
var $searchButton = $("#searchButton");
// 按筛选出的SP厂商名导出Excel
$("#exportButton").click(function() {
$("#listForm").attr("action","sp!exportfile.action");
$("#listForm").submit();
$("#listForm").attr("action","sp!list.action");
})
$("#searchButton").click(function() {
$("#listForm").attr("action","sp!list.action");
$("#listForm").submit();
})
})
</script>
3、在导出Excel 的Action方法中,直接利用pager自带的方法得到当前查询的厂商列表:
首先设置PageNumber为1,因为导出是从首页的第一天记录开始的,不是从当前页开始;然后设置PageSize 为 Integer.MAX_VALUE,因为要导出的是搜索出的全部记录,而不是一页的量;利用findPager(pager)这个已经封装好的方法得到当前查询的厂商列表页面对象,再调用pager.getResult() 这个方法得到查询出来的厂商列表exportList。
导出excel的代码如下:
public String exportfile(){
try {
// 创建导出列表,赋值已搜索出的SP厂商列表
pager.setPageNumber(1);
pager.setPageSize(Integer.MAX_VALUE);
pager = spService.findPager(pager);
List<Sp> exportList = (List<Sp>)pager.getResult();
System.out.println("++++++"+exportList.size());
// 创建导出操作工具对象
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet();
HSSFRow row = null;
// 若确认结果列表不为空才可以操作
if (exportList != null && exportList.size() > 0) {
// 创建列名行
row = sheet.createRow(0);
sheet.setColumnWidth(0, (short) 10000);
sheet.setColumnWidth(1, (short) 6000);
row.createCell(0).setCellValue("厂商名称");
row.createCell(1).setCellValue("厂商创建时间");
for (int i = 0; i < exportList.size(); i++) {
row = sheet.createRow(i + 1);
sheet.setColumnWidth(0, (short) 10000);
row.createCell(0).setCellValue(exportList.get(i).getName());
row.createCell(1).setCellValue(
DateOperateUtil.dateToStringWithFormat(exportList
.get(i).getCreateDate(),
"yyyy-MM-dd HH:mm:ss"));
}
try {
byte[] botes = DateOperateUtil.dateToStringWithFormat(new Date(), "yyyyMMddHHmmss").getBytes("UTF-8");
String sign = new String(botes, "UTF-8");
HttpServletResponse response = getResponse();
response.reset();
response.setCharacterEncoding("UTF-8");
response.addHeader("Content-Disposition",
"attachment;filename="
+ new String(sign.getBytes(), "ISO-8859-1")
+ ".xls");
OutputStream out = new BufferedOutputStream(
response.getOutputStream());
response.setContentType("application/msexcel;charset=UTF-8");
wb.write(out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
return ERROR;
}
} else {
addActionError("查询导出数据为空");
return ERROR;
}
} catch (Exception e) {
e.printStackTrace();
return ERROR;
}
return null;
}