对于birt布局展现部分就不说了,大致看一下就知道,但是数据源这个方面用过的人应该都有些麻烦,

 1,用jdbc只能通过sql语句查询的结果填充到表中,如果一条语句不能解决问题,或者需要写很复杂的sql语句也是不容易

2,使用scripted data source 这个可以解决上面的问题,但是具体怎么用,在现在spring mvc比较流行的时代,如何获取由spring管理的dao来查询数据

首先看下如何使用scripted data source

Zabbix 的 报表_List

选择 后命名 Finish就可以了

 

然后就是新建Data sets ,选择刚刚的名称命名,下一步

Zabbix 的 报表_spring_02

此时出现的页面主要是填写一些 名称-类型-别名-显示名这样的数据,那么相应的为 row["name"] --数据的类型---别名应该和第一个一样,就是换种标识方法,显示名就是在table中展现出来的,主要填写1,2,4即可

确定后在中间的窗口弹出了script的脚本编辑页面,

最上面有个script【---------】可以选择脚本执行的时期,我们选择open

然后就是在里面写脚本,当然在此之前,我们写一下通过java代码生成数据的方法

有些例子从网上找的,如下

 

//实体
package com.birt.entity;

public class Contact {

	private String name;
	private String phone;
	private String address;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		 = name;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	
}

具体获取数据的方法:

 

 

package com.birt.factory;

import java.util.ArrayList;
import java.util.List;

import com.birt.entity.Contact;

public class ContactDataFactory {

	public List<Contact> createContactList(){
		List<Contact> contacts = new ArrayList<Contact>();
		
		Contact contact1 = new Contact();
		contact1.setName("tom");
		contact1.setPhone("1334");
		contact1.setAddress("beijing");
		
		Contact contact2 = new Contact();
		contact2.setName("jack");
		contact2.setPhone("1552");
		contact2.setAddress("shanghai");
		
		Contact contact3 = new Contact();
		contact3.setName("rose");
		contact3.setPhone("1111");
		contact3.setAddress("tianjing");
		
		contacts.add(contact1);
		contacts.add(contact2);
		contacts.add(contact3);
		
		return contacts;
	}
}

那么现在写script脚本:

 

 

//importPackage(com.birt.factory);

count = 0

factory = new Packages.com.birt.factory.ContactDataFactory();

//factory = new ContactDataFactory();

contacts = factory.createContactList();

这样首先是 new Packages.包名.类名();之后是调用类对应的方法就行(不用定义contacts,就是全局变量了)

 

将script【fetch】

 

if(count<contacts.size()){
	row["name"] = contacts.get(count).getName();
	row["phone"] = contacts.get(count).getPhone();
	row["address"] = contacts.get(count).getAddress();
	count++;
	return true;
}
return false;

这里row[“name”]就是上面的名称,后面就和java代码一样遍历了,最后必须有return

 

最后一步就是讲数据展示出来了layout标签

Zabbix 的 报表_Zabbix 的 报表_03

 

 

页面效果

Zabbix 的 报表_Zabbix 的 报表_04

 

简单的例子大致就是这样了;

 

 

由于我用的是birt-report-designer-all-in-one-4.5.0-20150619-win32-win32-x86相当于一个eclipse,直接再里面建java项目写代码,新建report文件,最有直接运行就可以了,不需要想着怎么把birt集成到项目中去,所以就没有写相关的内容,下一次就是birt和spring mvc了

有一个疑问,在script【open】里面的脚步,有两种方式 一种是导入包 new class();调用方法,还有一种是直接 new Packages.包.class();调用方法,那么这个地方new 是不是都是从新建了一个对象呢,这个疑问可能一直在spring mvc中也会有.........因为Dao有spring管理,如果是new DAO(),那么相应的依赖注入不就全部失效了。。。。。