动态报告:从 bean 中检索字段值时出错

Dynamic Reports: Error retrieving field value from bean

我正在使用 Dynamic jasper 库为我的报告创建动态列。
这是我的代码:

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);

这是我的 class 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;
    }

}

这是错误:

JRBeanCollectionDataSource 需要一个 Bean 集合,每个代表一行,而不是一个对象集合,每个对象代表一列(正如您所想的那样)。

Bean class 需要 getters/setters 用于您定义的每个属性,例如 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
}

并且您的测试 class 将创建这些 MyBean classes:

的集合
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;
    }