BIRT的chart功能似乎并不是很強(qiáng)大,反正在使用過(guò)程中,出現(xiàn)過(guò)編輯器不好使,被迫直接修改xml文件的情況.
現(xiàn)在,有一個(gè)這樣的需求,就是讓Y軸的標(biāo)題顯示用戶(hù)輸入的值.
如圖所示,這個(gè)標(biāo)題是在編輯/定義圖表的時(shí)候輸入的固定值,這個(gè)值不管是改成params["test"]還是reportContext.getParameter("test")都會(huì)直接返回文本,而不是表達(dá)式值.
但是,這個(gè)文本唯一支持的動(dòng)態(tài),就是本地化,那么本文將介紹如何利用resources.properties來(lái)實(shí)現(xiàn)這個(gè)標(biāo)題的動(dòng)態(tài)顯示
首先,設(shè)置這個(gè)chart的resource使用<YOUR_LOCATION>/reources.properties文件
然后,在這個(gè)properties文件中輸入test_field=Hopeshared's Test
接著,修改這個(gè)title
這個(gè)時(shí)候,preview的結(jié)果,title就會(huì)顯示properties文件里的內(nèi)容
向report添加一個(gè)名為test的參數(shù),這個(gè)參數(shù)是string類(lèi)型,必填項(xiàng),用戶(hù)的輸入將保存到properties文件并顯示在chart中
接著,寫(xiě)個(gè)腳本,讓properties文件內(nèi)容發(fā)生變化
在整個(gè)report的initialize方法中,寫(xiě)入
1
importPackage(Packages.java.lang);
2
importPackage(Packages.java.util);
3
importPackage(Packages.java.io);
4
importPackage(Packages.java.net);
5
6
var t_value = params["test"];
7
var prop=new Properties();
8
9
var in_stream=new FileInputStream("<YOUR_PROPERTIES_FOLDER>/resources.properties");
10
prop.load(in_stream);
11
in_stream.close();
12
13
prop.put("test_field", t_value);
14
15
var fout=new FileOutputStream("<YOUR_PROPERTIES_FOLDER>/resources.properties");
16
prop.store(fout,"Test Properties");
17
fout.close();
18
19
var current = new File("<YOUR_PROPERTIES_FOLDER>");
20
21
var cl = new URLClassLoader(new Array(current.toURL()));
22
res = ResourceBundle.getBundle("resource", Locale.getDefault(), cl);
最后,preview一下,看看結(jié)果.
歡迎大家告訴我其他更好的辦法來(lái)達(dá)到這個(gè)目標(biāo),謝謝!