Spring MVC + saída no excel

1 resposta
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>

1 Resposta

gabrielmelo

Vou desistir dessa implementação. Vou partir para a saída no irepot. No ireport como eu apresentaria os dados no formato em excel? Criaria um arquivo normal jrxml? Como apresentaria as colunas do excel no ireport?

Criado 25 de março de 2013
Ultima resposta 26 de mar. de 2013
Respostas 1
Participantes 1