Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 55fcd27

Browse files
Spring MVC Reportes con DynamicJasper
Generación de reportes de manera dinámica o programática usando la librería DynamicJasper.
1 parent f6aefd1 commit 55fcd27

File tree

13 files changed

+396
-0
lines changed

13 files changed

+396
-0
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project-shared-configuration>
3+
<!--
4+
This file contains additional configuration written by modules in the NetBeans IDE.
5+
The configuration is intended to be shared among all the users of project and
6+
therefore it is assumed to be part of version control checkout.
7+
Without this configuration present, some functionality in the IDE may be limited or fail altogether.
8+
-->
9+
<spring-data xmlns="http://www.netbeans.org/ns/spring-data/1">
10+
<config-files>
11+
<config-file>src/main/webapp/WEB-INF/springmvc-servlet.xml</config-file>
12+
</config-files>
13+
<config-file-groups/>
14+
</spring-data>
15+
<properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
16+
<!--
17+
Properties that influence various parts of the IDE, especially code formatting and the like.
18+
You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
19+
That way multiple projects can share the same settings (useful for formatting rules for example).
20+
Any value defined here will override the pom.xml file value but is only applicable to the current project.
21+
-->
22+
<org-netbeans-modules-javascript2-requirejs.enabled>true</org-netbeans-modules-javascript2-requirejs.enabled>
23+
<org-netbeans-modules-projectapi.jsf_2e_language>JSP</org-netbeans-modules-projectapi.jsf_2e_language>
24+
</properties>
25+
</project-shared-configuration>

‎tutorial_webmvc_DynamicJasper/pom.xml

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
<groupId>carmelo.spring</groupId>
5+
<artifactId>tutorial_webmvc_DynamicJasper</artifactId>
6+
<packaging>war</packaging>
7+
<version>1.0</version>
8+
<name>tutorial_webmvc_DynamicJasper</name>
9+
10+
<properties>
11+
<spring.version>4.3.7.RELEASE</spring.version>
12+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
13+
<maven.compiler.source>1.8</maven.compiler.source>
14+
<maven.compiler.target>1.8</maven.compiler.target>
15+
</properties>
16+
17+
<dependencies>
18+
<!-- Spring Web MVC -->
19+
<dependency>
20+
<groupId>org.springframework</groupId>
21+
<artifactId>spring-webmvc</artifactId>
22+
<version>${spring.version}</version>
23+
</dependency>
24+
<dependency>
25+
<groupId>org.springframework</groupId>
26+
<artifactId>spring-context-support</artifactId>
27+
<version>${spring.version}</version>
28+
</dependency>
29+
30+
<dependency>
31+
<groupId>com.fasterxml.jackson.core</groupId>
32+
<artifactId>jackson-core</artifactId>
33+
<version>2.8.7</version>
34+
</dependency>
35+
36+
<!-- Java Servlet y JSP -->
37+
<dependency>
38+
<groupId>javax.servlet</groupId>
39+
<artifactId>javax.servlet-api</artifactId>
40+
<version>3.1.0</version>
41+
<scope>provided</scope>
42+
</dependency>
43+
<dependency>
44+
<groupId>javax.servlet</groupId>
45+
<artifactId>jstl</artifactId>
46+
<version>1.2</version>
47+
</dependency>
48+
49+
<!-- Loogging slf4j -->
50+
<dependency>
51+
<groupId>org.slf4j</groupId>
52+
<artifactId>slf4j-log4j12</artifactId>
53+
<version>1.7.12</version>
54+
</dependency>
55+
<dependency>
56+
<groupId>log4j</groupId>
57+
<artifactId>log4j</artifactId>
58+
<version>1.2.17</version>
59+
</dependency>
60+
61+
<!-- Lombok -->
62+
<dependency>
63+
<groupId>org.projectlombok</groupId>
64+
<artifactId>lombok</artifactId>
65+
<version>1.16.12</version>
66+
</dependency>
67+
68+
<!-- Dynamic Jasper -->
69+
<dependency>
70+
<groupId>ar.com.fdvs</groupId>
71+
<artifactId>DynamicJasper</artifactId>
72+
<version>5.0.10</version>
73+
</dependency>
74+
75+
<!-- Excel XLS View -->
76+
<dependency>
77+
<groupId>org.apache.poi</groupId>
78+
<artifactId>poi</artifactId>
79+
<version>3.14</version>
80+
</dependency>
81+
82+
</dependencies>
83+
84+
<build>
85+
<finalName>tutorial_webmvc_DynamicJasper</finalName>
86+
<plugins>
87+
<plugin>
88+
<groupId>org.apache.maven.plugins</groupId>
89+
<artifactId>maven-war-plugin</artifactId>
90+
<version>2.3</version>
91+
<configuration>
92+
<failOnMissingWebXml>false</failOnMissingWebXml>
93+
</configuration>
94+
</plugin>
95+
</plugins>
96+
</build>
97+
98+
</project>
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package carmelo.spring;
2+
3+
import carmelo.spring.report.DynamicReportView;
4+
import org.springframework.context.annotation.Bean;
5+
import org.springframework.context.annotation.ComponentScan;
6+
import org.springframework.context.annotation.Configuration;
7+
import org.springframework.web.servlet.ViewResolver;
8+
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
9+
import org.springframework.web.servlet.view.InternalResourceViewResolver;
10+
import org.springframework.web.servlet.view.jasperreports.JasperReportsViewResolver;
11+
12+
@Configuration
13+
@EnableWebMvc
14+
@ComponentScan(basePackages = {
15+
"carmelo.spring.controller",
16+
"carmelo.spring.service"})
17+
public class WebAppConfig {
18+
19+
@Bean
20+
public ViewResolver reportViewResolver() {
21+
JasperReportsViewResolver resolver = new JasperReportsViewResolver();
22+
resolver.setViewNames("*_DynamicReport");
23+
resolver.setViewClass(DynamicReportView.class);
24+
resolver.setOrder(1);
25+
return resolver;
26+
}
27+
28+
@Bean
29+
public ViewResolver jspViewResolver() {
30+
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
31+
resolver.setPrefix("/WEB-INF/views/");
32+
resolver.setSuffix(".jsp");
33+
resolver.setOrder(2);
34+
return resolver;
35+
}
36+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package carmelo.spring;
2+
3+
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
4+
5+
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
6+
7+
@Override
8+
protected Class<?>[] getRootConfigClasses() {
9+
return null;
10+
}
11+
12+
@Override
13+
protected Class<?>[] getServletConfigClasses() {
14+
return new Class[]{WebAppConfig.class};
15+
}
16+
17+
@Override
18+
protected String[] getServletMappings() {
19+
return new String[]{"/"};
20+
}
21+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package carmelo.spring.controller;
2+
3+
import ar.com.fdvs.dj.core.DynamicJasperHelper;
4+
import ar.com.fdvs.dj.core.layout.ClassicLayoutManager;
5+
import ar.com.fdvs.dj.domain.builders.ColumnBuilderException;
6+
import ar.com.fdvs.dj.domain.builders.FastReportBuilder;
7+
import carmelo.spring.report.ReportGenerator;
8+
import carmelo.spring.service.CustomerService;
9+
import java.util.Map;
10+
import java.util.logging.Level;
11+
import java.util.logging.Logger;
12+
import net.sf.jasperreports.engine.JRException;
13+
import net.sf.jasperreports.engine.JasperReport;
14+
import org.springframework.beans.factory.annotation.Autowired;
15+
import org.springframework.stereotype.Controller;
16+
import org.springframework.ui.Model;
17+
import org.springframework.web.bind.annotation.PathVariable;
18+
import org.springframework.web.bind.annotation.RequestMapping;
19+
20+
@Controller
21+
public class CustomerController {
22+
23+
@Autowired
24+
private CustomerService customerService;
25+
26+
@RequestMapping("/report/{fmt}")
27+
public String report(@PathVariable("fmt") String format, Model model) {
28+
29+
model.addAttribute("format", format);
30+
model.addAttribute("datasource", customerService.findAll());
31+
model.addAttribute("generator", (ReportGenerator) this::customerReport);
32+
33+
return "customer_DynamicReport";
34+
}
35+
36+
private JasperReport customerReport(Map params) {
37+
try {
38+
FastReportBuilder drb = new FastReportBuilder();
39+
drb
40+
.addColumn("ID", "ID", Integer.class.getName(), 10)
41+
.addColumn("FIRSTNAME", "FIRSTNAME", String.class.getName(), 50)
42+
.addColumn("LASTNAME", "LASTNAME", String.class.getName(), 50)
43+
.addColumn("STREET", "STREET", String.class.getName(), 50)
44+
.addColumn("CITY", "CITY", String.class.getName(), 50)
45+
.setTitle("Primer informe con Dynamic Jasper")
46+
.setPrintBackgroundOnOddRows(true)
47+
.setUseFullPageWidth(true);
48+
49+
return DynamicJasperHelper.generateJasperReport(
50+
drb.build(), new ClassicLayoutManager(), params);
51+
52+
} catch (ColumnBuilderException | ClassNotFoundException | JRException ex) {
53+
Logger.getLogger(CustomerController.class.getName()).log(Level.SEVERE, null, ex);
54+
return null;
55+
}
56+
}
57+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package carmelo.spring.model;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Data;
5+
6+
@Data
7+
@AllArgsConstructor
8+
public class Customer {
9+
private Integer ID;
10+
private String FIRSTNAME;
11+
private String LASTNAME;
12+
private String STREET;
13+
private String CITY;
14+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package carmelo.spring.report;
2+
3+
import java.util.Collection;
4+
import java.util.Map;
5+
import net.sf.jasperreports.engine.JRDataSource;
6+
import net.sf.jasperreports.engine.JasperFillManager;
7+
import net.sf.jasperreports.engine.JasperPrint;
8+
import net.sf.jasperreports.engine.JasperReport;
9+
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
10+
import org.springframework.web.servlet.view.jasperreports.JasperReportsMultiFormatView;
11+
12+
public class DynamicReportView extends JasperReportsMultiFormatView {
13+
14+
@Override
15+
protected JasperReport loadReport() {
16+
return null;
17+
}
18+
19+
@Override
20+
protected JasperPrint fillReport(Map<String, Object> model) throws Exception {
21+
22+
JRDataSource ds = new JRBeanCollectionDataSource((Collection<?>) model.get("datasource"));
23+
ReportGenerator rg = (ReportGenerator) model.get("generator");
24+
25+
JasperReport jr = rg.generateReport(model);
26+
JasperPrint jp = JasperFillManager.fillReport(jr, model, ds);
27+
28+
return jp;
29+
}
30+
31+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
2+
package carmelo.spring.report;
3+
4+
import java.util.Map;
5+
import net.sf.jasperreports.engine.JasperReport;
6+
7+
public interface ReportGenerator {
8+
JasperReport generateReport(Map params);
9+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package carmelo.spring.service;
2+
3+
import carmelo.spring.model.Customer;
4+
import java.util.List;
5+
6+
public interface CustomerService {
7+
8+
List<Customer> findAll();
9+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package carmelo.spring.service;
2+
3+
import java.util.Arrays;
4+
import java.util.List;
5+
import carmelo.spring.model.Customer;
6+
import org.springframework.stereotype.Service;
7+
8+
@Service
9+
public class CustomerServiceImpl implements CustomerService {
10+
11+
@Override
12+
public List<Customer> findAll() {
13+
return Arrays.asList(
14+
new Customer(0, "Laura", "Steel", "429 Seventh Av.", "Dallas"),
15+
new Customer(1, "Susanne", "King", "366 - 20th Ave.", "Olten"),
16+
new Customer(2, "Anne", "Miller", "20 Upland Pl.", "Lyon"),
17+
new Customer(3, "Michael", "Clancy", "542 Upland Pl.", "San Francisco"),
18+
new Customer(4, "Sylvia", "Ringer", "365 College Av.", "Dallas"),
19+
new Customer(5, "Laura", "Miller", "294 Seventh Av.", "Paris"),
20+
new Customer(6, "Laura", "White", "506 Upland Pl.", "Palo Alto"),
21+
new Customer(7, "James", "Peterson", "231 Upland Pl.", "San Francisco"),
22+
new Customer(8, "Andrew", "Miller", "288 - 20th Ave.", "Seattle"),
23+
new Customer(9, "James", "Schneider", "277 Seventh Av.", "Berne"),
24+
new Customer(10, "Anne", "Fuller", "135 Upland Pl.", "Dallas"),
25+
new Customer(11, "Julia", "White", "412 Upland Pl.", "Chicago"),
26+
new Customer(12, "George", "Ott", "381 Upland Pl.", "Palo Alto"),
27+
new Customer(13, "Laura", "Ringer", "38 College Av.", "New York"),
28+
new Customer(14, "Bill", "Karsen", "53 College Av.", "Oslo"),
29+
new Customer(15, "Bill", "Clancy", "319 Upland Pl.", "Seattle"),
30+
new Customer(16, "John", "Fuller", "195 Seventh Av.", "New York"),
31+
new Customer(17, "Laura", "Ott", "443 Seventh Av.", "Lyon"),
32+
new Customer(18, "Sylvia", "Fuller", "158 - 20th Ave.", "Paris"),
33+
new Customer(19, "Susanne", "Heiniger", "86 - 20th Ave.", "Dallas"),
34+
new Customer(20, "Janet", "Schneider", "309 - 20th Ave.", "Oslo"),
35+
new Customer(21, "Julia", "Clancy", "18 Seventh Av.", "Seattle"),
36+
new Customer(22, "Bill", "Ott", "250 - 20th Ave.", "Berne"),
37+
new Customer(23, "Julia", "Heiniger", "358 College Av.", "Boston"),
38+
new Customer(24, "James", "Sommer", "333 Upland Pl.", "Olten"),
39+
new Customer(25, "Sylvia", "Steel", "269 College Av.", "Paris"),
40+
new Customer(26, "James", "Clancy", "195 Upland Pl.", "Oslo"),
41+
new Customer(27, "Bob", "Sommer", "509 College Av.", "Seattle"),
42+
new Customer(28, "Susanne", "White", "74 - 20th Ave.", "Lyon"),
43+
new Customer(29, "Andrew", "Smith", "254 College Av.", "New York"),
44+
new Customer(30, "Bill", "Sommer", "362 - 20th Ave.", "Olten"),
45+
new Customer(31, "Bob", "Ringer", "371 College Av.", "Olten"),
46+
new Customer(32, "Michael", "Ott", "339 College Av.", "Boston"),
47+
new Customer(33, "Mary", "King", "491 College Av.", "Oslo"),
48+
new Customer(34, "Julia", "May", "33 Upland Pl.", "Seattle"),
49+
new Customer(35, "George", "Karsen", "412 College Av.", "Chicago"),
50+
new Customer(36, "John", "Steel", "276 Upland Pl.", "Dallas"),
51+
new Customer(37, "Michael", "Clancy", "19 Seventh Av.", "Dallas"),
52+
new Customer(38, "Andrew", "Heiniger", "347 College Av.", "Lyon"),
53+
new Customer(39, "Mary", "Karsen", "202 College Av.", "Chicago"),
54+
new Customer(40, "Susanne", "Miller", "440 - 20th Ave.", "Dallas"),
55+
new Customer(41, "Bill", "King", "546 College Av.", "New York"),
56+
new Customer(42, "Robert", "Ott", "503 Seventh Av.", "Oslo"),
57+
new Customer(43, "Susanne", "Smith", "2 Upland Pl.", "Dallas"),
58+
new Customer(44, "Sylvia", "Ott", "361 College Av.", "New York"),
59+
new Customer(45, "Janet", "May", "396 Seventh Av.", "Oslo"),
60+
new Customer(46, "Andrew", "May", "172 Seventh Av.", "New York"),
61+
new Customer(47, "Janet", "Fuller", "445 Upland Pl.", "Dallas"),
62+
new Customer(48, "Robert", "White", "549 Seventh Av.", "San Francisco"),
63+
new Customer(49, "George", "Fuller", "534 - 20th Ave.", "Olten")
64+
);
65+
}
66+
67+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /