Java 动态报告:从bean检索字段值时出错
我正在使用动态jasper库为我的报告创建动态列。Java 动态报告:从bean检索字段值时出错,java,collections,datasource,dynamic-reports,Java,Collections,Datasource,Dynamic Reports,我正在使用动态jasper库为我的报告创建动态列。 这是我的代码: FastReportBuilder drb = new FastReportBuilder(); DynamicReport dr = drb.addColumn("State", "state", String.class.getName(),30) .addColumn("Branch", "branch", String.class.getName(),30) //
这是我的代码:
FastReportBuilder drb = new FastReportBuilder();
DynamicReport dr = drb.addColumn("State", "state", String.class.getName(),30)
.addColumn("Branch", "branch", String.class.getName(),30) // title, property to show, class of the property, width
.addColumn("Product Line", "productLine", String.class.getName(),50)
.addColumn("Item", "item", String.class.getName(),50)
.addColumn("Item Code", "id", Long.class.getName(),20)
.addColumn("Quantity", "quantity", Long.class.getName(),30)
.addColumn("Amount", "amount", Float.class.getName(),30)
.addGroups(2) // Group by the first two columns
.setTitle("November 2006 sales report")
.setSubtitle("This report was generateed at" + new Date())
.setUseFullPageWidth(true) //make colums to fill the page width
.build();
JRDataSource ds = new JRBeanCollectionDataSource(TestRepositoryProducts.getDummyCollection());
JasperPrint jp = DynamicJasperHelper.generateJasperPrint(dr, new ClassicLayoutManager(), ds);
JasperViewer.viewReport(jp);
这是我的类TestRepositoryProducts
:import java.util.ArrayList;
import java.util.Collection;
import java.util.Vector;
public class TestRepositoryProducts {
public static Collection<Object> getDummyCollection() {
Collection<Object> v = new ArrayList<Object>();
v.add("qsdqsd");
v.add("qsdqdqs");
v.add("qsdqdqs");
v.add("qsdqdqs");
v.add(32165);
v.add(65456);
v.add(1.5);
return v;
}
}
import java.util.ArrayList;
导入java.util.Collection;
导入java.util.Vector;
公共类TestRepositoryProducts{
公共静态集合getDummyCollection(){
集合v=新的ArrayList();
v、 添加(“qsdqsd”);
v、 添加(“qsdqdqs”);
v、 添加(“qsdqdqs”);
v、 添加(“qsdqdqs”);
v、 增加(32165);
v、 增加(65456);
v、 增加(1.5);
返回v;
}
}
这就是错误:JRBeanCollectionDataSource
需要一个bean集合,每个bean代表一行,而不是一个对象集合,每个对象代表一列(如您所想)
Bean类需要为您定义的每个属性使用getter/setter,比如getState()
,getBranch()
等等
例如:
public class MyBean {
private String state;
// other properties
public MyBean() {}
public String getState() {
return state;
}
public void setState(String s) {
state = s;
}
// other getters and setters
}
您的测试类将创建这些MyBean类的集合:
public class TestRepositoryProducts {
public static Collection<MyBean> getDummyCollection() {
Collection<MyBean> v = new ArrayList<MyBean>();
MyBean b1 = new MyBean();
b1.setState("s1");
b1.setBranch("b1");
// set other properties of b1
v.add(b1);
// more beans created and added to v
return v;
}
公共类TestRepositoryProducts{
公共静态集合getDummyCollection(){
集合v=新的ArrayList();
MyBean b1=新的MyBean();
b1.设定状态(“s1”);
b1.立博兰(“b1”);
//设置b1的其他属性
v、 添加(b1);
//创建更多bean并添加到v
返回v;
}