BIRT的chart功能似乎并不是很强大,反正在使用过程中,出现过编辑器不好使,被迫直接修改xml文件的情况.
现在,有一个这样的需求,就是让Y轴的标题显示用户输入的值.
如图所示,这个标题是在编辑/定义图表的时候输入的固定值,这个值不管是改成params["test"]还是reportContext.getParameter("test")都会直接返回文本,而不是表达式值.
但是,这个文本唯一支持的动态,就是本地化,那么本文将介绍如何利用resources.properties来实现这个标题的动态显示
首先,设置这个chart的resource使用<YOUR_LOCATION>/reources.properties文件
然后,在这个properties文件中输入test_field=Hopeshared's Test
接着,修改这个title
这个时候,preview的结果,title就会显示properties文件里的内容
向report添加一个名为test的参数,这个参数是string类型,必填项,用户的输入将保存到properties文件并显示在chart中
接着,写个脚本,让properties文件内容发生变化
在整个report的initialize方法中,写入
1importPackage(Packages.java.lang);
2importPackage(Packages.java.util);
3importPackage(Packages.java.io);
4importPackage(Packages.java.net);
5
6var t_value = params["test"];
7var prop=new Properties();
8
9var in_stream=new FileInputStream("<YOUR_PROPERTIES_FOLDER>/resources.properties");
10prop.load(in_stream);
11in_stream.close();
12
13prop.put("test_field", t_value);
14
15var fout=new FileOutputStream("<YOUR_PROPERTIES_FOLDER>/resources.properties");
16prop.store(fout,"Test Properties");
17fout.close();
18
19var current = new File("<YOUR_PROPERTIES_FOLDER>");
20
21var cl = new URLClassLoader(new Array(current.toURL()));
22res = ResourceBundle.getBundle("resource", Locale.getDefault(), cl);
最后,preview一下,看看结果.
欢迎大家告诉我其他更好的办法来达到这个目标,谢谢!