JasperReports JSF插件用例系列

这是文章系列的切入点,在该系列文章中,我将尝试介绍JasperReport JSF Plugin的一些用例, JasperReport JSF Plugin是一种工具,旨在轻松地将为JasperReports设计的业务报告集成到JSF应用程序中。 该系列中描述的所有示例都可以从JasperReports JSF插件网站的“ 示例”部分获得,并将成为同一业务应用程序的一部分:在线书店。

本系列将介绍构建前面提到的Web应用程序所需的步骤。 我将尝试使文章尽可能整洁,独立且完整,但是我会故意省略一些与此处没有公开的主要技术没有特别关系的部分。 这样,每篇文章都将直截了当,并且不再那么冗长,从而使人们更容易理解主要演员及其角色。

在深入介绍JasperReports JSF插件的不同场景的材料之前,我们需要设置Web应用程序项目,这将是进一步使用案例的起点。 本系列中用于该项目的主要工具如下:

  • JasperReports 4.5.1:报告引擎。
  • iReport 4.5.1:可视报表设计器
  • Java Server Faces 1.2和Facelets 1.1.1:我的应用程序的Web框架(请注意,可以轻松地将其迁移到JSF 2.x中)。
  • JasperReports JSF插件 1.0:报告引擎和Web框架之间的集成桥梁。
  • Apache Derby 10.8.2.2:将保存我们所需信息的数据库。
  • Apache Tomcat 6.0.35:将用于部署和测试应用程序的应用程序服务器。

每个特定报告要显示的数据将来自一个简单的数据库,其中包含一些表,这些表将保存我们所需的信息。 我将用来复合域模型的主要实体基本上是: 帐簿客户订单订单行

内容

  • 1项目设置
  • 2配置iReport
  • 3域模型
  • 4。结论

项目设置

我将采用的方法是创建一个新的基于Web的项目,该项目将使用该数据库模型。 我将使用Maven来配置和管理将要使用的依赖项,因为我已经习惯了它,这将避免我独立获取所有jar文件并在我的代码库中手动配置它们。 其他任何人都可以使用他/她喜欢的工具( Ant , Gradle ,基于IDE等)。

使用Maven做到这一点的一个很好的例子是Maven Book中的“ simple-webapp”原型样本。 我将在此处发布使用该原型生成项目结构时使用的命令行语句:

mvn archetype:create -DgroupId=net.sf.jasperreports.jsf.sample
-DartifactId=jrjsf-usecases
-Dpackage=net.sf.jasperreports.jsf.sample.usecases
-Dversion=1.0-SNAPSHOT
-DarchetypeArtifactId=maven-archetype-webapp
-DarchetypeGroupId=org.apache.maven.archetypes
-DarchetypeVersion=1.0

这将在名为jrjsf-usecases且具有以下初始值的文件夹中生成一个Maven项目:

  • groupIdnet.sf.jasperreports.jsf.sample
  • artifactIdjrjsf用例
  • 版本1.0-快照
  • net.sf.jasperreports.jsf.sample.usecases

现在,需要对pom.xml文件进行一些修改,以保存我们项目所需的依赖项。 我要做的主要更改将包括添加对Java 1.5(及更高版本)的支持以及对本文开头列出的项目的依赖关系。

为了能够使用Java 5发行后添加到Java的泛型和其他高级功能,我们需要配置maven-compiler-plugin,以便Java编译器可以识别出我们希望支持这些功能:

<project>...<build><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><groupId>org.apache.maven.plugins</groupId><configuration><source>1.5</source><target>1.5</target></configuration></plugin></plugins></build>
</project>

现在,让我们添加实现应用程序所需的依赖项:

<project>...<dependencies><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.4</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.0</version><scope>provided</scope></dependency><dependency><groupId>javax.el</groupId><artifactId>el-api</artifactId><version>1.0</version></dependency><dependency><groupId>javax.faces</groupId><artifactId>jsf-api</artifactId><version>1.2_14</version></dependency><dependency><groupId>javax.faces</groupId><artifactId>jsf-impl</artifactId><version>1.2_14</version></dependency><dependency><groupId>com.sun.facelets</groupId><artifactId>jsf-facelets</artifactId><version>1.1.1</version></dependency><dependency><groupId>net.sf.jasperreports</groupId><artifactId>jasperreports</artifactId><version>4.5.1</version></dependency><dependency><groupId>net.sf.jasperreports.jsf</groupId><artifactId>jasperreports-jsf</artifactId><version>1.0</version></dependency><dependency><groupId>org.apache.derby</groupId><artifactId>derbyclient</artifactId><version>10.8.2.2</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.8.1</version><scope>test</scope></dependency></dependencies>
</project>

在此项目中,我们将使用可通过JNDI访问的容器管理数据源。 这种配置取决于我们使用的应用程序服务器的类型。 由于我将Tomcat用作应用程序服务器,因此我需要在文件夹src / main / webapp / META-INF下的项目中添加一个context.xml文件,以告诉它如何访问该数据库以及资源的类型。我想要:

<Context path='/jrjsf-usecases' reloadable='true'><Resource name='jdbc/BookStoreDB' auth='Container' type='javax.sql.DataSource'maxActive='100' maxIdle='30' maxWait='10000'username='app' password='' driverClassName='org.apache.derby.jdbc.ClientDriver'url='jdbc:derby://localhost:1527/bookstoredb;create=true'/></Context>

配置iReport

我们需要配置iReport,使其能够连接到我们的数据库,因此让我们启动iReport设计工具并对其进行配置,以使其可以进行设计工作。 iReport的不带至Apache Derby数据库的支持外的开箱 ,我们需要将库添加到其类路径和手工配置Derby JDBC驱动程序。 本练习将教我们如何配置工具以支持其他任何数据库。

首先,从Apache Derby数据库的网站下载该数据库,然后将其安装(解压缩zip文件)到本地计算机中您选择的文件夹中(如果尚未执行的话)。 然后打开iReport的首选项/选项窗口,然后选择类路径选项卡:

我将把Derby的lib文件夹添加到iReport类路径中。 为此,请单击“添加文件夹”按钮并浏览文件系统,直到获得Apache Derby安装中的lib文件夹:

完成后,单击“首选项”窗口中的“确定”按钮,现在iReport中应该可以使用Apache Derby客户端类。 现在,我们准备在iReport中配置Apache Derby数据源,该数据源将由我们的报告使用。 要添加新的数据源,我们可以从iReport欢迎页面开始,然后单击“ 步骤1 :创建数据库连接...”按钮,或者单击工具栏上的“报告数据源”按钮,然后单击“添加”。按钮。 无论哪种方式,我们都将到达如下所示的窗口:

需要在iReport中手动配置Apache Derby数据源,因此在上一个窗口的列表中选择“数据库JDBC连接”,单击“下一个>”,然后在下一个窗口中填写JDBC驱动程序的值:

字段的值如下:

  • 名称BookStoreDB
  • JDBC驱动程序org.apache.derby.jdbc.ClientDriver
  • JDBC URLjdbc:derby:// localhost:1527 / bookstoredb
  • 用户名app
  • 密码<空>

现在,在继续之前,请确保您的Apache Derby实例正在运行以允许与其建立连接,然后单击“测试”按钮以检查一切是否正常。

领域模型

假设我们已经配置了项目并准备开始工作(我们有一个基本的项目文件夹结构,所有基本依赖项都在我们的类路径中,并且iReport能够连接到我们的数据库),所以让我们从码。 我在这方面的第一步将是创建一个SQL文件( bookstore.create.sql ),以初始化我在本系列的Introduction部分中讨论的域模型。 复制此段下面的文本并将其粘贴到项目文件夹结构内的文件中,以便以后使用:

create table book (book_id int generated by default as identity primary key,title varchar(50) not null,author varchar(50) not null,published_year varchar(4) not null,genre varchar(20) not null,price numeric not null
);create table customer (customer_id int generated by default as identity primary key,name varchar(250) not null
);create table purchase_order (order_id int generated by default as identity primary key,customer_id int not null,created_date date not null,constraint customer_fk foreign key (customer_id) references customer(customer_id)
);create table purchase_order_line (order_line_id int generated by default as identity primary key,order_id int not null,book_id int not null,item_count int not null,constraint order_fk foreign key (order_id) references purchase_order(order_id),constraint book_fk foreign key (book_id) references book(book_id)
);

这只是我的域模型的后端部分,在我的应用程序中,我还需要将那些实体表示为Java类。 因此,要使此域模型完整,下一步就是编写Java类,该类需要表示Java应用程序中先前定义的域模型。 现在该看一下以前的模型了,我们有4个不同的实体,因此我们将需要在Java应用程序中使用4个不同的类来遵守该模型:

public class Book {private Long id;private String title;private String author;private String publishedYear;private String genre;private double price;public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public String getGenre() {return genre;}public void setGenre(String genre) {this.genre = genre;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public String getPublishedYear() {return publishedYear;}public void setPublishedYear(String publishedYear) {this.publishedYear = publishedYear;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}}

顾客

public class Customer {private Long id;private String name;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}

订购

public class Order {private Long id;private Customer customer;private Date createdDate;private List lines = new ArrayList();public Date getCreatedDate() {return createdDate;}public void setCreatedDate(Date createdDate) {this.createdDate = createdDate;}public Customer getCustomer() {return customer;}public void setCustomer(Customer customer) {this.customer = customer;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public List getLines() {return lines;}public void setLines(List lines) {this.lines = lines;}}

订单行

public class OrderLine {private Long id;private Order order;private Book book;private int itemCount;public Book getBook() {return book;}public void setBook(Book book) {this.book = book;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public int getItemCount() {return itemCount;}public void setItemCount(int itemCount) {this.itemCount = itemCount;}public Order getOrder() {return order;}public void setOrder(Order order) {this.order = order;}}

现在,使用您选择的工具连接到数据库,并执行bookstoredb.create.sql文件创建表结构。

结论

我试图使代码尽可能简单和干净。 上一节中列出的Java类可以使用ORM工具(例如Hibernate , iBATIS , Ebean等)映射到我们的关系数据库。我将对象关系映射层的选择留给读者,因为有很多选择,但是没有一个选择将影响我们将报告与Web框架集成的方式。

我们的Web应用程序应包含其他类,以将其体系结构构成为DAO和业务外观以及视图控制器。 但是,出于与我没有添加任何可能有助于将模型类链接到数据库表的ORM信息相同的原因,在本文中添加所有它们完全超出了范围。 如今有很多IoC容器( Spring框架 , Weld , Seam等),本系列中真正重要的是演示JasperReports JSF插件的用法。 (视图控制器将在其特定的文章中列出,因为它们是每个特定用例的一部分)。

这就是我们开始在这个精巧工具的不同示例中所做的全部。 在接下来的几周内,新文章将在JasperReports JSF插件类别下发布,并提供详细的示例来演示如何实现最常见的用例。 希望您喜欢它们,欢迎任何评论。

参考:来自Code Nibbles博客的JCG合作伙伴 Alonso Dominguez的JasperReports JSF插件用例系列 。


翻译自: https://www.javacodegeeks.com/2012/06/jasperreports-jsf-plugin-use-cases.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372472.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

回归分析

一元线性回归模型&#xff1a; 一元线性回归分析的主要任务是&#xff1a; 解得&#xff1a; 三、检验、预测与控制&#xff1a; 1&#xff09;F检验法&#xff1a; 2&#xff09;t检验法 3&#xff09;r检验法 3预测&#xff1a; 四、可线性化的一元非线性回归&#xff08;曲线…

与传统的计算机硬件系统相比,计算机一级名词解释

目前微型机中普遍采用的字符编码是ASCII码。它是用7位二进制数对127个字符进行编码&#xff0c;其中前32个是一些不可打印的控制符号。多媒体系统由主机硬件系统、多媒体数字化外部设备和多媒体软件三部分组成。机器语言和汇编语言都是"低级"的语言&#xff0c;而高级…

【java】对象变成垃圾被垃圾回收器gc收回前执行的操作:Object类的protected void finalize() throws Throwable...

1 package 对象被回收前执行的操作;2 class A{3 Override4 protected void finalize() throws Throwable {5 System.out.println("在对象变成垃圾被gc收回前执行的操作。");6 }7 }8 public class Test_finalize {9 public static void main(…

服务器 风扇测试软件,图解服务器风扇安装的正确方法

一般不是太垃圾的机箱总有两个地方可以装风扇&#xff0c;前面的一般在硬盘托架处&#xff0c;后面的一般在电源下面&#xff0c;键盘口上方。有的机箱出厂就已经装好1&#xff5e;2个风扇了。图中越红的区域温度相对越高。应该什么样的风道合理呢?1、前后都装机箱风扇的情况应…

处理Weblogic卡住的线程

定义或卡线是什么&#xff1f; 如果线程 在设定 的时间 内连续工作&#xff08;非空闲&#xff09;&#xff0c;则WebLogic Server会将其诊断为阻塞 。 您可以通过更改在诊断出线程被阻塞之前的时间长度&#xff08; Stuck Thread Max Time &#xff09;&#xff0c;以及通过更…

电话圈(floyd)

题意&#xff1a; 如果两个人相互打电话&#xff0c;则说他们在同一个电话圈里。例如&#xff0c;a打给b&#xff0c;b打给c&#xff0c;c打给d&#xff0c;d打给a&#xff0c;则这4个人在同一个圈里&#xff1b;如果e打给f但f不打给e&#xff0c;则不能推出e和f在同一个电话圈…

计算机二级网址打不开,大神为你解决win7系统打不开二级网页链接的操作教程...

许多win7系统电脑的时候,常常会遇到win7系统打不开二级网页链接的情况&#xff0c;比如近日有用户到本站反映说win7系统打不开二级网页链接的问题&#xff0c;但是却不知道要怎么解决win7系统打不开二级网页链接&#xff0c;我们依照首先我们打开IE浏览器&#xff0c;然后点击上…

3步实现Jetty和Eclipse集成

本教程将引导您逐步了解如何集成Jetty和Eclipse&#xff0c;以及如何在Eclipse中的Jetty服务器上运行Web应用程序。 脚步&#xff1a; 安装Jetty Eclipse插件 建立网路应用程式 运行网络应用 1 –安装Jetty Eclipse插件 将服务器添加到“服务器”视图时&#xff0c;将不会…

使用Akka处理1000万条消息

Akka演员承诺并发。 有什么更好的模拟方式&#xff0c;看看使用商品硬件和软件处理1000万条消息需要花费多少时间&#xff0c;而无需进行任何低级调整。我用Java编写了整个1000万条消息的处理过程&#xff0c;整个结果令我惊讶。 当我在具有Intel i5 – 4核&#xff0c;4 Gb RA…

dart服务器开发性能,DartVM服务器开发(第四天)--代码优化

优化请求上一篇文章中&#xff0c;我们通过依赖第三方http_server这个包实现将html页面返回给浏览器&#xff0c;但是一般的服务器都包含请求html&#xff0c;json格式的传递&#xff0c;这样就有可能造成了混乱&#xff0c;下面我们使用http_server这个包进行优化吧&#xff0…

【Android】SVG和VectorDrawable——相关格式转换

SVG是矢量图&#xff0c;刚接触尚不能仔细介绍&#xff0c;但只需记得一点&#xff1a;放大不失真&#xff0c;存储也方便。 因为多数户型图使用SVG格式&#xff0c;Android要用的话必须通过相关转换工具&#xff0c;将原SVG格式文件&#xff0c;转换为XML后缀的VectorDrawable…

css中基线指的是哪一条线,如何设置基线网络_CSS, Vertical Rhythm 教程_W3cplus

首先&#xff0c;当谈到排版&#xff0c;我们先要了解基线是什么&#xff1f;维基百科是这样定义)的&#xff1a;在排版和书法中&#xff0c;基线是以字终sit底线为基础&#xff0c;并且向两边延伸的直线。好极了&#xff0c;但我为什么要忽视他呢&#xff1f;好希望你充满激情…

使用JGroups进行ElasticMQ消息复制

ElasticMQ是一台消息服务器&#xff0c;具有Scala&#xff0c;Java和与Amazon SQS兼容的接口。 它通过跨服务器群集复制消息来支持有保证的消息传递&#xff0c;并通过日志记录实现消息持久性。 消息复制是ElasticMQ的核心功能之一。 但是&#xff0c;如果您看一下代码&#xf…

Spring Social入门

像我一样&#xff0c;无论是添加简单的Facebook“赞”按钮&#xff0c;一大堆“共享”按钮还是显示时间轴信息&#xff0c;您都不会注意到当前对应用程序“社交化”的热衷。 每个人都在做这件事&#xff0c;包括Spring的家伙&#xff0c;事实上&#xff0c;他们提供了一个称为S…

apache ajax 跨域访问,Apache 实现AJAX跨域请求

当使用ajax跨域请求时&#xff0c;浏览器报错&#xff1a;XmlHttpRequest error: Origin null is not allowed by Access-Control-Allow-Origin.肯定是跨域的问题&#xff0c;如果用jsonp或者pro更多&#xff1a;当使用ajax跨域请求时&#xff0c;浏览器报错&#xff1a;XmlHtt…

EhCache复制:RMI与JGroups

最近&#xff0c;我正在研究一种需要复制缓存的产品。 缓存提供程序已经确定-EhCache&#xff0c;剩下的就是有关传输的问题。 哪一个是最佳选择&#xff1f; 这里的最佳选择是指性能更好的选择。 仅在两个可用传输之间进行了性能评估-JGroups和RMI&#xff0c;对其他传输不予考…

服务器wifi无线放大器,一回家WiFi信号太弱?教你用两毛钱制作信号放大器

原标题&#xff1a;一回家WiFi信号太弱&#xff1f;教你用两毛钱制作信号放大器现在家家户户都有无线路由器&#xff0c;但是大部分人都还是早期的单天线产品&#xff0c;信号覆盖范围比较小&#xff0c;特别是穿墙性能不行。人在客厅WiFi信号还满格&#xff0c;一到卧室就瞬间…

iOS开发 之 可穿戴设备 蓝牙4.0 BLE 开发

1 前言 当前有越来越多的可穿戴设备使用了蓝牙4.0 BLE&#xff08;Bluetooth Low Energy)。对于iOS开发而言&#xff0c;Apple之前专门推出CoreBluetooth的Framework来支持BLE的开发。对于硬件开发有了解的朋友应该知道&#xff0c;在之前使用低版本的蓝牙的设备&#xff0c;要…

git服务器维护 备份,gitlab服务运维,备份与恢复 - 橙子柠檬's Blog

gitlab服务运维工作Gitlab-ctl 使用gitlab-ctl start #启动服务gitlab-ctl stop #停止服务gitlab-ctl restart #重启服务检查服务的日志信息gitlab-ctl tail redis #检查redis的日志gitlab-ctl tail postgresql #…

使用TestNG的弹簧测试支持

TestNG是一个测试框架&#xff0c;旨在涵盖所有类别的测试&#xff1a;单元&#xff0c;功能&#xff0c;端到端&#xff0c;集成等。 它包括许多功能&#xff0c;例如灵活的测试配置&#xff0c;对数据驱动测试的支持&#xff08;使用DataProvider&#xff09;&#xff0c;强大…