Boa tarde lista,
Estou com problema em fazer o download de um relatório de um arquivo excel através da aplicação. Ao invés de abrir uma janela para fazer o download do arquivo, a aplicação esta imprimido na tela o excel, é isso que esta errado. Tenho que abrir a janela de download. Estou fazendo isso com spring e já coloquei no pom da aplicação a dependência POI. Vou postar o código, qualquer dica é bem vinda.
Obrigado.
[code]@RequestMapping(value="/excel-form")
public class ExcelLoteRemessaController extends AbstractController {
@Autowired
private LoteRemessaFacadeService loteRemessaFacadeProxy;
@Autowired
private ServidorFacadeService servidorFacadeProxy;
@RequestMapping(value="gerar_excel", method=RequestMethod.POST)
public ModelAndView gerarExcel(HSSFWorkbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception {
//dummy data
Map<String,String> revenueData = new HashMap<String,String>();
revenueData.put("Jan-2010", "$100,000,000");
revenueData.put("Feb-2010", "$110,000,000");
revenueData.put("Mar-2010", "$130,000,000");
revenueData.put("Apr-2010", "$140,000,000");
revenueData.put("May-2010", "$200,000,000");
return new ModelAndView("ExcelLoteRemessaView","revenueData",revenueData);
}
}[/code]
[code]public class ExcelLoteRemessaView extends AbstractExcelView {
@SuppressWarnings("rawtypes")
@Override
protected void buildExcelDocument(Map model, HSSFWorkbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception {
@SuppressWarnings("unchecked")
Map<String,String> revenueData = (Map<String,String>) model.get("revenueData");
//create a wordsheet
HSSFSheet sheet = workbook.createSheet("Revenue Report");
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment; filename=Report.xls");
OutputStream outSteram = response.getOutputStream();
HSSFRow header = sheet.createRow(0);
header.createCell(0).setCellValue("Month");
header.createCell(1).setCellValue("Revenue");
int rowNum = 1;
for (Map.Entry<String, String> entry : revenueData.entrySet()) {
//create the row data
HSSFRow row = sheet.createRow(rowNum++);
row.createCell(0).setCellValue(entry.getKey());
row.createCell(1).setCellValue(entry.getValue());
}
workbook.write(outSteram);
outSteram.flush();
outSteram.close();
}
}[/code]
servlet-context.xml
[code]<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xsi:schemaLocation=“
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd”>
<!-- Imports user-defined @Controller beans that process client requests -->
<beans:import resource="controllers.xml" />
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources/ directory -->
<resources mapping="/resources/**" location="/resources/" />
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
<beans:property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
</beans:bean>
<!-- Only needed because we require fileupload in the org.springframework.samples.mvc.fileupload package -->
<beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
<beans:bean class="br.gov.pgfn.scif.web.controller.ExcelLoteRemessaController" />
<beans:bean class="org.springframework.web.servlet.view.XmlViewResolver">
<beans:property name="location">
<beans:value>/WEB-INF/spring/spring-excel-views.xml</beans:value>
</beans:property>
<beans:property name="order" value="0" />
</beans:bean>
</beans:beans>[/code]
spring-excel-views.xml
[code]
<bean id="ExcelLoteRemessaView"
class="br.gov.pgfn.scif.web.view.ExcelLoteRemessaView">
</bean>
[/code]