Nesse post demonstro como intregrar uma aplicação Web desenvolvida pelo Spring MVC com o JasperReports para emissão de relatórios. A integração entre o Spring MVC e JasperReports não tem nenhuma relação com o Spring Roo, mas para facilitar a criação e o desenvolvimento do projeto vou assumir o uso do Spring Roo.
Dependências
Além da biblioteca do JasperReports, dependendo do caso precisamos de outras libs complementares:
- Spring Support
- iText (pdf)
- POI (xls)
A seguir o trecho do pom.xml (Maven) com configuração dos artefatos. No trecho abaixo também coloco as configurações para o plugin do Maven que automatiza a compilcação dos relatórios jrxml para o formato jasper, utilizado pelo JasperReports:
...
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.6</version>
<scope>compile</scope>
<optional>true</optional>
</dependency>
...
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jasperreports-maven-plugin</artifactId>
<configuration>
<sourceDirectory>src/main/webapp/WEB-INF/reports</sourceDirectory>
<outputDirectory>src/main/webapp/WEB-INF/reports</outputDirectory>
</configuration>
<executions>
<execution>
<goals>
<goal>compile-reports</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>3.5.3</version>
</dependency>
<dependency>
<groupId>org.apache.log4j</groupId>
<artifactId>com.springsource.org.apache.log4j</artifactId>
<version>1.2.15</version>
</dependency>
</dependencies>
</plugin>
...
Próxima etapa é configurar no xml do MVC (webmvc-config.xml) o viewResolver do Spring que indica o properties com as configurações de cada relatório.
<bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver"> <property name="basename" value="relatorios"/> </bean>
O arquivo relatorios.properties (na raiz do diretório de classes) armazena qual a classe que estipula o formato de geração do relatório, a url com o caminho do arquivo do relatório.
No exemplo estou usando o arquivo compilado, o .jasper, mas o Spring aceita a extensão jrxml. A propriedade reportKeyData (opcional) indica o apelido para o DataSource com os dados que o relatório depende. Já o valor relatorioPedidos usado como base das 3 chaves é o identificador do relatório, usamos no retorno do método da Controller que processa o relatório.
relatorioPedidos.(class)= org.springframework.web.servlet.view.jasperreports.JasperReportsMultiFormatView relatorioPedidos.url=/WEB-INF/reports/pedidos.jasper relatorioPedidos.reportDataKey=pedidosDS
A classe JasperReportsMultiFormatView é indicada em relatórios que podem ser emitidos em mais de um formato, ou seja, o mesmo relatório gerado em xls e pdf. Outra alternativa seria utilizar JasperReportsPdfView, nesse caso a emissão ocorre só em pdf.
Pra fechar o método da Controller que processa os dados para emissão do relatório:
...
@RequestMapping("/report")
@Controller
public class ReportController {
@RequestMapping(value ="/pedido/pdf", method = RequestMethod.GET)
public String processaRelatorioPedidos(
@RequestParam String de, @RequestParam String ate,
ModelMap modelMap)
{
JRBeanCollectionDataSource ds =
new JRBeanCollectionDataSource(Pedido.findPedidosByDataGeracao(de, ate),false);
modelMap.put("pedidosDS", ds);
return "relatorioPedidos";
}
}
A documentação oficial do Spring disponibiliza um capítulo sobre a integração do Spring MVC com o JasperReports.
@edermag
www.yaw.com.br
1 comment:
gostei do exemplo, trabalhei um pouco com o ROO, vou tentar implementar algum relatório agora
Post a Comment