【发布时间】:2011-01-14 10:17:04
【问题描述】:
我有一个 java backing bean,它有一个方法(称为getDataList()),它返回一个ArrayList<MyType>。
在MyType.java 中,我有大量的setter 和getter,它们要么分配Strings 要么分配String[]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 对象中提取数据?我应该使用哈希图吗?
根据要求,这里是相关代码的最小 sn-ps(感谢 Colin):
这是 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 的工作,但我认为这并不重要。提前致谢。
【问题讨论】:
-
不解释你的代码,直接给出。
-
当我有 600 个字符的评论要列出时,我该怎么做?
-
UIData中没有这样的bug,所以你填充或访问列表的方式一定是错误的。请发布一个 SSCCE sscce.org (即摆脱所有不相关/不相关的代码混乱,直到你得到最小可能的 sn-p 来准确重现问题)。 -
我怎样才能将代码放在评论中,使其读作
code(我注意到这不起作用)?当我搜索代码和 cmets 时,我显然会收到有关评论代码的帖子... -
您可以对您的问题进行编辑以添加代码。