Java BIRT 4.3新POJO数据源有问题
我现在正在学习这个例子Java BIRT 4.3新POJO数据源有问题,java,birt,Java,Birt,我现在正在学习这个例子 我似乎无法让它正常工作。在定义新数据集(新Birt POJO数据集)的步骤中,我似乎找不到“POJO数据集类名”。匹配项小部件保持为空。我试着编辑rptdesign,而source选项卡尝试了各种变体(带/不带包名),但没有任何效果。有人成功地使用了BIRT的这一新功能吗?好吧,我的错。如果我们必须实现一个接口,而不是试图推断birt是如何读取自定义pojo数据集的,那么就更容易了 因此,在这个示例中,除了CustomerDataSet类之外,其他所有功能都按照所描述的那
我似乎无法让它正常工作。在定义新数据集(新Birt POJO数据集)的步骤中,我似乎找不到“POJO数据集类名”。匹配项小部件保持为空。我试着编辑rptdesign,而source选项卡尝试了各种变体(带/不带包名),但没有任何效果。有人成功地使用了BIRT的这一新功能吗?好吧,我的错。如果我们必须实现一个接口,而不是试图推断birt是如何读取自定义pojo数据集的,那么就更容易了 因此,在这个示例中,除了CustomerDataSet类之外,其他所有功能都按照所描述的那样工作。下面是为我工作的CustomerDataSet类的实现
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class CustomerDataSet {
public Iterator<Customer> itr;
public List<Customer> getCustomers() {
List<Customer> customers = new ArrayList<Customer>();
Customer c = new Customer(103);
c.setCity("City1");
c.setCountry("Country1");
c.setCreditLimit(100);
c.setName("aName1");
c.setState("state1");
customers.add(c);
c = new Customer(104);
c.setCity("City2");
c.setCountry("Country2");
c.setCreditLimit(200);
c.setName("aName2");
c.setState("aStat2");
customers.add(c);
c = new Customer(105);
c.setCity("City3");
c.setCountry("Country3");
c.setCreditLimit(300);
c.setName("aName3");
c.setState("aStat3");
customers.add(c);
return customers;
}
public void open(Object obj, Map<String,Object> map) {
}
public Object next() {
if (itr == null)
itr = getCustomers().iterator();
if (itr.hasNext())
return itr.next();
return null;
}
public void close() {
}
}
import java.util.ArrayList;
导入java.util.Iterator;
导入java.util.List;
导入java.util.Map;
公共类CustomerDataSet{
公共迭代器itr;
公共列表getCustomers(){
列出客户=新建ArrayList();
客户c=新客户(103);
c、 setCity(“City1”);
c、 setCountry(“Country1”);
c、 设定信用额度(100);
c、 集合名(“aName1”);
c、 设置状态(“状态1”);
加上(c);
c=新客户(104);
c、 setCity(“City2”);
c、 setCountry(“Country2”);
c、 设定信用额度(200);
c、 设定名称(“aName2”);
c、 设置状态(“aStat2”);
加上(c);
c=新客户(105);
c、 setCity(“City3”);
c、 setCountry(“Country3”);
c、 设定信用额度(300);
c、 设定名称(“aName3”);
c、 设置状态(“aStat3”);
加上(c);
返回客户;
}
打开公共空(对象对象、地图){
}
公共对象下一个(){
如果(itr==null)
itr=getCustomers().iterator();
if(itr.hasNext())
返回itr.next();
返回null;
}
公众假期结束(){
}
}
好的,我的错。如果我们必须实现一个接口,而不是试图推断birt是如何读取自定义pojo数据集的,那么就更容易了
因此,在这个示例中,除了CustomerDataSet类之外,其他所有功能都按照所描述的那样工作。下面是为我工作的CustomerDataSet类的实现
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class CustomerDataSet {
public Iterator<Customer> itr;
public List<Customer> getCustomers() {
List<Customer> customers = new ArrayList<Customer>();
Customer c = new Customer(103);
c.setCity("City1");
c.setCountry("Country1");
c.setCreditLimit(100);
c.setName("aName1");
c.setState("state1");
customers.add(c);
c = new Customer(104);
c.setCity("City2");
c.setCountry("Country2");
c.setCreditLimit(200);
c.setName("aName2");
c.setState("aStat2");
customers.add(c);
c = new Customer(105);
c.setCity("City3");
c.setCountry("Country3");
c.setCreditLimit(300);
c.setName("aName3");
c.setState("aStat3");
customers.add(c);
return customers;
}
public void open(Object obj, Map<String,Object> map) {
}
public Object next() {
if (itr == null)
itr = getCustomers().iterator();
if (itr.hasNext())
return itr.next();
return null;
}
public void close() {
}
}
import java.util.ArrayList;
导入java.util.Iterator;
导入java.util.List;
导入java.util.Map;
公共类CustomerDataSet{
公共迭代器itr;
公共列表getCustomers(){
列出客户=新建ArrayList();
客户c=新客户(103);
c、 setCity(“City1”);
c、 setCountry(“Country1”);
c、 设定信用额度(100);
c、 集合名(“aName1”);
c、 设置状态(“状态1”);
加上(c);
c=新客户(104);
c、 setCity(“City2”);
c、 setCountry(“Country2”);
c、 设定信用额度(200);
c、 设定名称(“aName2”);
c、 设置状态(“aStat2”);
加上(c);
c=新客户(105);
c、 setCity(“City3”);
c、 setCountry(“Country3”);
c、 设定信用额度(300);
c、 设定名称(“aName3”);
c、 设置状态(“aStat3”);
加上(c);
返回客户;
}
打开公共空(对象对象、地图){
}
公共对象下一个(){
如果(itr==null)
itr=getCustomers().iterator();
if(itr.hasNext())
返回itr.next();
返回null;
}
公众假期结束(){
}
}
感谢您发布解决方案。我认为迭代器应该是私有的,并在“open”方法中初始化,而不是在next()中初始化。@Francois Lacoursiere在我的例子中,我看不到数据源中的数据源类名。如果你遇到了这个问题,请帮助我。我一直在尝试推断,我已经推断了。您需要使用public object next()
方法创建对象。它将通过此转换器。感谢您发布解决方案。我认为迭代器应该是私有的,并在“open”方法中初始化,而不是在next()中初始化。@Francois Lacoursiere在我的例子中,我看不到数据源中的数据源类名。如果你遇到了这个问题,请帮助我。我一直在尝试推断,我已经推断了。您需要使用public object next()
方法创建对象。它通过这个转换器