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.pswp.cn/news/372472.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372472.shtml
英文地址,請注明出處:http://en.pswp.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;而高級…

ubuntu安裝jdk1.8

sudo add-apt-repository ppa:webupd8team/javasudo apt-get updatesudo apt-get install oracle-java8-installer 轉載于:https://www.cnblogs.com/czwangzheng/p/5793488.html

【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;以及通過更…

控件自定義左鍵點擊消息相應函數的問題(請懂的人來解答一下)

【問題描述】 自定義CTouchInputEdit類&#xff0c;繼承自CEdit。 實現一個新的功能&#xff0c;當點擊edit控件的時候&#xff0c;彈出一個輸入框。 下面的代碼片段1&#xff0c;當點擊控件之后&#xff0c;會彈出輸入框&#xff0c;退出輸入框以后&#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;將不會…

【Linux開發】如何更改linux文件的擁有者及用戶組(chown和chgrp)

本文整理自&#xff1a; http://blog.163.com/yanenshun126/blog/static/128388169201203011157308/http://ydlmlh.iteye.com/blog/1435157一、基本知識在Linux中&#xff0c;創建一個文件時&#xff0c;該文件的擁有者都是創建該文件的用戶。該文件用戶可以修改該文件的擁有者…

使用Akka處理1000萬條消息

Akka演員承諾并發。 有什么更好的模擬方式&#xff0c;看看使用商品硬件和軟件處理1000萬條消息需要花費多少時間&#xff0c;而無需進行任何低級調整。我用Java編寫了整個1000萬條消息的處理過程&#xff0c;整個結果令我驚訝。 當我在具有Intel i5 – 4核&#xff0c;4 Gb RA…

PHP中unset,array_splice刪除數組中元素的區別

php中刪除數組元素是非常的簡單的&#xff0c;但有時刪除數組需要對索引進行一些排序要求我們會使用到相關的函數&#xff0c;這里我們來介紹使用unset,array_splice刪除數組中的元素區別吧 如果要在某個數組中刪除一個元素&#xff0c;可以直接用的unset&#xff0c;但是數組的…

dart服務器開發性能,DartVM服務器開發(第四天)--代碼優化

優化請求上一篇文章中&#xff0c;我們通過依賴第三方http_server這個包實現將html頁面返回給瀏覽器&#xff0c;但是一般的服務器都包含請求html&#xff0c;json格式的傳遞&#xff0c;這樣就有可能造成了混亂&#xff0c;下面我們使用http_server這個包進行優化吧&#xff0…

JBox2D和JavaFX:事件與力量

在昨天的示例中&#xff0c;您看到了如何創建一個簡單的世界并使用WorldView進行顯示&#xff0c;以及如何提供自定義渲染器。 現在&#xff0c;我們將添加一些用戶輸入。 我們將創建一個類似于彈球機中的鰭狀肢的控件。 為此&#xff0c;我們將創建一個關節。 在JBox2D中&…

【Android】SVG和VectorDrawable——相關格式轉換

SVG是矢量圖&#xff0c;剛接觸尚不能仔細介紹&#xff0c;但只需記得一點&#xff1a;放大不失真&#xff0c;存儲也方便。 因為多數戶型圖使用SVG格式&#xff0c;Android要用的話必須通過相關轉換工具&#xff0c;將原SVG格式文件&#xff0c;轉換為XML后綴的VectorDrawable…

服務器時間維護制度,網絡設備及服務器日常維護管理制度

第一章總則第一條&#xff1a;為保證機房設備與信息的安全&#xff0c;保障本校服務器及網絡系統在良好、穩定、高效、快速的安全運行。特制定本制度。第二條&#xff1a;為確保中心機房網絡設備特別是服務器安全&#xff0c;根據崗位職責設立機房管理員&#xff0c;負責對機房…

SELinux入門簡介

操作系統有兩類訪問控制&#xff1a;自主訪問控制&#xff08;DAC&#xff09;和強制訪問控制&#xff08;MAC&#xff09;。標準Linux安全是一種DAC&#xff0c;SELinux為Linux增加了一個靈活的和可配置的的MAC。 進程啟動時所擁有的權限就是運行此進程的用戶權限&#xff0c;…

RESTEasy教程第3部分:異常處理

在開發軟件應用程序時&#xff0c;異常處理是顯而易見的要求。 如果在處理用戶請求時發生任何錯誤&#xff0c;我們應該向用戶顯示一個錯誤頁面&#xff0c;其中包含詳細的異常消息&#xff0c;錯誤代碼&#xff08;可選&#xff09;&#xff0c;更正輸入和重試的提示&#xff…

WinForm關閉窗體徹底的退出方式

//System.Environment.Exit(0); //Process.GetCurrentProcess().Kill(); //System.Threading.Thread.CurrentThread.Abort(); System.Diagnostics.Process.GetCurrentProcess().Kill();Application.Exit(); 轉載于:https://www.cnblogs.com/XuPengLB/p/5799178.html