gpt4 book ai didi

java - [h ||丰富]:dataTable not iterating over all objects

转载 作者:行者123 更新时间:2023-12-02 00:52:59 27 4
gpt4 key购买 nike

我有一个java支持bean,它有一个方法(称之为getDataList()),它返回ArrayList<MyType> .

MyType.java我有很多 setter 和 getter,它们都分配 StringString[] s。示例实例化将 4 个对象分配给 ArrayList,其中包含(除其他外)以下数据:

fid = 1    ftid = 1
fid = 2 ftid = 1
fid = 3 ftid = 1
fid = 3 ftid = 2

在我的 jsf 代码中,我将结构引用到 rich:dataTable 中。问题是表格是这样的:

fid        ftid
1 1
2 1
3 2 # should be 3, 1
3 2

正如您所看到的,最后一次迭代是不正确的。我已经用 h:dataTable 尝试过了,同样的情况发生了,所以我知道它可能不是 richfaces。但我的 java 控制台通过 eclipse(ganymede/tomcat6) 显示了正确的分配:

|STDOUT| 2010-02-08 15:23:58,953 | INFO  | [http-8989-5]: adding ftqId 1 feedId 1
|STDOUT| 2010-02-08 15:23:58,984 | INFO | [http-8989-5]: adding ftqId 1 feedId 2
|STDOUT| 2010-02-08 15:23:59,000 | INFO | [http-8989-5]: adding ftqId 1 feedId 3
|STDOUT| 2010-02-08 15:23:59,000 | INFO | [http-8989-5]: adding ftqId 2 feedId 3

谁能告诉我如何正确从 ArrayList 对象中提取数据?我应该使用 HashMap 吗?

根据请求,这里是相关代码的最小片段(感谢科林):

这是 bean 代码:

public ArrayList<MyType> getFDataList() {
XMLHandler handler = new XMLHandler();
dataList = new ArrayList<MyType>();
try {Document doc = handler.XMLDoc("Config.xml");} // catches removed
String[] fIds = handler.XMLList("//snip/fid/text()");
for (String fId : fIds) {
MyType tld = new MyType();
String[] ftIds = handler.XMLList("//snip/ftid/text()");
for (String ftId : ftIds) {
tld.setFtId(ftId);
tld.setFId(fId);
logger.info("ftId:"+ftId+",fId:"+fId);
dataList.add(tld); // each ft
}
}
return dataList;
}

这是支持类代码:

public class MyType {
private String fId;
private String ftId;

public String getFId() {
return fId;
}

public void setFId(String f) {
fId = f;
}

public String getFtId() {
return ftId;
}

public void setFtId(String fi) {
ftId = fi;
}
}

我唯一能想到的是我正在嵌套将对象添加到 ArrayList 中所做的工作,但我认为这并不重要。提前致谢。

最佳答案

您应该每次在内循环中创建一个新的 MyType 对象。发生的情况是,您仅为每个 fId 创建对象的一个​​实例,但对于每个 ftId,您将覆盖该值并将其添加到列表中。您最终会获得对同一对象的多个引用。

像这样在内循环内移动实例化。

   for (String fId : fIds) {         
String[] ftIds = handler.XMLList("//snip/ftid/text()");
for (String ftId : ftIds) {
MyType tld = new MyType();
tld.setFtId(ftId);
tld.setFId(fId);
logger.info("ftId:"+ftId+",fId:"+fId);
dataList.add(tld); // each ft
}
}

关于java - [h ||丰富]:dataTable not iterating over all objects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2222709/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com