Spring MVC + saída no excel

0 respostas
gabrielmelo

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.

@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);
 
		}
	
}
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();

	}

}
servlet-context.xml
<?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">
	<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->

	<!-- 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>
spring-excel-views.xml
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
 
	<bean id="ExcelLoteRemessaView"
	   	class="br.gov.pgfn.scif.web.view.ExcelLoteRemessaView">
	</bean>
 
</beans>
Criado 25 de março de 2013
Respostas 0
Participantes 1