ireport入門教程之參數?

ireport入門教程之參數,本文介紹ireport中折線圖的具體實現方法

工具/原料

ireport

方法/步驟

Parameters通常是用來在打印的時候從程序裡傳值到報表裡。也就是說parameters通常的是起參數傳遞的作用。他們可以被用在一些特定的場合(比如應用中SQL 查詢的條件),如report中任何一個需要從外部傳入的變量等(如一個Image對象所包括的char或報表title的字符串)。

和使用Fields一樣,parameters也需要在創建的時候定義它的數據類型。parameters的數據類型是標準的java的Object。

ireport入門教程之參數

在ireport中,Parameters的機制是允許用戶通過應用程序傳遞參數致報表當中。在jasperreort中的某個對象中的expression可以通過下面的語法來訪問一個當前ireport中存在的parameter:

$P{parameter name}。

如果應用程序沒有為報表中定義的parameter賦值,那麼parameter將會取我們在定義它的時候設置的default value的值。parameters是一個Java Object,所以如果它的類型是Object類型,我們在其default value裡寫下面的表達式就是錯誤的:

0.123

你必須要創建一個Object,如:

New Double(0.123)

這種寫法就是正確的。

在查詢中使用Parameters

Parameters可以用來做SQL查詢的條件參數的傳遞。如果你想根據部門編號(dept_id)得到客戶的詳細信息 (設計的時候我們是不知道這個部門編號的具體值是多少的).此時我們可以這樣組織查詢語句:

select * from employee where dept_id=$P{deptId}

此時SQL查詢引擎將會採用PreparedStatement來處理傳入的deptId值以此作為查詢條件參數。

如果你想直接通過parameter 值來作為SQL語句的一部分,那麼你可以使用下面的特殊語法:$P!{parameter name}。這種寫法允許你在查詢時用parameter的值來替換parameter name。例如,如果我們有一個參數名為MyWhere其值為:where dept_id=D11 ,查詢寫法如下:

Select * from employee $P!{MyWhere}

查詢時實際提交的字符串是:

Select * from employee where dept_id=D11

在程序裡使用Parameters

在應用程序裡,如果想把某個值傳遞到我們的報表中parameters時,我們可以把相關的值放入一個擴展java.util.Map接口類裡,然後傳入到ireport裡。如下面的代碼:

ireport入門教程之參數

fillReport是一個關鍵的方法,它允許你通過一個文件名,一個參數集來傳遞到我們要調用的報表當中。例-如通過下面的處理方法我們可以讓一個處部的傳入值作為我們報表的title。

下面的是一個例子:

a).聲明一個parameter.這個parameter是java.lang.String 類型,名字為:name_report:

ireport入門教程之參數

b).將這個parameter拖到page中的title band.修改上面的程序代碼如下:

ireport入門教程之參數

ireport入門教程之參數

運行時效果如下:

ireport入門教程之參數

一般情況下,我們不需要為報表中的每一個parameters傳遞一個值,除非某一個parameter一定要從外部程序傳入時我們才需為一個parameter設置一個值。如果一個parameter外部門程序沒有為其賦值那麼ireport將使用Default Value Expression來對一個parameter進行初始化,如果連Default Value Expression沒有設置那麼它的值就是null。

事實上,對於一個parameters我們不僅僅可以傳遞一個String,Integer,Boolean等java中小的對象,同時我們還可以利用parameters來傳遞一些足夠大足夠複雜的對象,比如一個圖像(java.awt.Image),或者通過一個parameters來為一個為子報表提供的datasource 連接等。在用Map類型傳遞參數時我們要注意傳遞的參數要與report裡的parameters類型保持一致,否則會拋出ClassCastException。

ireport內嵌的Parameters:

ireport提供了一些內建的parameters,這些parameters對於用戶來說是隻讀的。內嵌的parameters列表如下:

ireport入門教程之參數

ireport入門教程之參數

ireport入門教程之參數

同為比較常用的java報表生成工具,FineReport對參數的解讀和使用方法與ireport有所不同,具體實現思路和步驟如下,供ireport使用者借鑑:

在大多數情況下,我們並不需要報表把數據庫中所有的數據都呈現出來,而是要根據一些條件來過濾出我們想要的數據,這就是參數查詢。

FineReport報表中就是使用參數來動態的過濾數據的,實現用戶和數據的實時交互,如下圖:

注:鼠標移至參數界面的中間區域會出現收縮按鈕,摺疊或展開參數查詢界面。

ireport入門教程之參數

如何實現參數查詢

幾乎所有的統計報表都會有類似上圖的統計條件,傳統的做法是使用如ext、html等編程實現,工作量大且維護成本高。

Finereport報表只需要通過參數的定義,添加參數控件綁定數據、參數過濾和參數面板樣式三個步驟便可以輕鬆實現參數查詢,零代碼,維護簡單。

實現步驟

FR報表提供了參數界面的概念,讓用戶快速製作出參數表單界面,製作參數查詢界面的步驟如下:

參數定義:設置參數名稱,添加參數,根據實際情況的不同添加不同種類的參數,詳細請查看參數的種類與區別。

添加控件綁定數據:FineReport參數查詢,是在參數面板中添加控件,使控件名字與參數名稱一樣,通過該控件將其控件值傳遞給參數,實現動態修改參數值得效果,可為控件綁定數據,直接選擇;

參數面板樣式設定:設置參數界面中控件的位置,參數面板的位置,背景等等。

ireport入門教程之參數

參數應用實例之URL給參數傳遞中文值

雖然我們建議模板名稱、參數變量名稱都用英文,但是對於中國式的複雜報表,參數肯定有中文情況。

使用ie瀏覽器通過url給參數賦值為中文時,會發現中文值會出現亂碼,如下圖所示

ireport入門教程之參數

問題原因

因為瀏覽器編碼與服務器編碼不一致,導致中文url輸入會產生亂碼,無法被正常識別。

解決方案

通過url給參數賦值一般應用在報表已經集成到項目中,希望點擊某個鏈接將某個值傳遞給報表;而在瀏覽器中直接給參數賦值呢,一般是做測試使用的,此時可以將瀏覽器換成火狐或者谷歌。

集成到項目中,可以使用FR.cjkEncode()方法,如點擊某個鏈接給col賦值為地區,此時可以使用如下方法:

1. window.location=";col="+FR.cjkEncode("中文名稱")

相關問題答案