gpt4 book ai didi

java - 使用 arrayList 作为 XPages 中重复控件的源

转载 作者:太空宇宙 更新时间:2023-11-04 13:27:34 24 4
gpt4 key购买 nike

我开发了一个名为 payObj 的 java Bean,它被定义为 HashMap<String, PaymentItem>其中 PaymentItem 是一个类,它定义了与每个单独付款相关的多个字段。 payObj 最初由许多相关的 Notes 文档填充。所有这些都非常有效。我在 payObj.allItems() 中有一个方法,它返回 PaymentItem(s) 的 ArrayList ——也许有更好的方法来获取它们,但这目前有效:

public ArrayList<PaymentItem> allItems(){
ArrayList<PaymentItem> rtn = new ArrayList<PaymentItem>();
try{
for (Integer n = 1; n <= internalMap.size(); n++) {
String thisKey = n.toString();
PaymentItem pItem = this.internalMap.get((thisKey ).toString());
if (debug) System.out.println("Copy item key = " + thisKey );
rtn.add((n - 1),pItem);
}
if (debug) System.out.println("Return allItems " + rtn.toString());
return rtn;
}catch(Exception e){
rtn = null;
System.out.println("Error in PaymentMap allItems " + e.toString());
return rtn;
}
}

编辑 --- 我更改了 allItems 并添加了一些附加输出:

public ArrayList<PaymentItem> allItems(){
ArrayList<PaymentItem> rtn = new ArrayList<PaymentItem>();
try{
for (Integer n = 1; n <= internalMap.size(); n++) {
String thisKey = n.toString();
PaymentItem pItem = new PaymentItem();
pItem = this.internalMap.get((thisKey ).toString());
if (debug) System.out.println("Copy item key = " + pItem.getExpPayDate().toString() );
rtn.add((n - 1),pItem);
}
for (Integer n = 0; n< rtn.size(); n++){
if (debug) System.out.println("dates from ArrayList = " + rtn.get(n).getExpPayDate().toString());
}
if (debug) System.out.println("Return allItems " + rtn.toString());
return rtn;
}catch(Exception e){
rtn = null;
System.out.println("Error in PaymentMap allItems " + e.toString());
return rtn;
}
}

并在日志中获取此输出:

10/09/2015 01:21:04 PM  HTTP JVM: Copy item key = Thu Sep 24 12:00:00 MDT 2015
10/09/2015 01:21:04 PM HTTP JVM: Copy item key = Sat Sep 05 12:00:00 MDT 2015
10/09/2015 01:21:04 PM HTTP JVM: Copy item key = Fri Aug 28 12:00:00 MDT 2015
10/09/2015 01:21:04 PM HTTP JVM: dates from ArrayList = Thu Sep 24 12:00:00 MDT 2015
10/09/2015 01:21:04 PM HTTP JVM: dates from ArrayList = Sat Sep 05 12:00:00 MDT 2015
10/09/2015 01:21:04 PM HTTP JVM: dates from ArrayList = Fri Aug 28 12:00:00 MDT 2015
10/09/2015 01:21:04 PM HTTP JVM: Return allItems [ca.wfsystems.core.PaymentItem@39393939, ca.wfsystems.core.PaymentItem@4ef64ef6, ca.wfsystems.core.PaymentItem@51ca51ca]

所以看起来 ArrayList 确实填充正确。

结束编辑------

然后我使用 payObj.allItems() 作为重复控件的源:

<xp:repeat id="repeat1" rows="30" var="pItem"
indexVar="rIndex" value="#{javascript:payObj.allItems()}">
<xp:text escape="true" id="computedField5"
value="#{javascript:pItem.expPayDate}">
<xp:this.converter>
<xp:convertDateTime type="date"></xp:convertDateTime>
</xp:this.converter>
</xp:text>
<xp:br></xp:br>
</xp:repeat>

当重复调用 payObj.allItems() 时,我在日志中得到以下打印输出:

10/09/2015 10:01:32 AM  HTTP JVM: Copy item key = 1
10/09/2015 10:01:32 AM HTTP JVM: Copy item key = 2
10/09/2015 10:01:32 AM HTTP JVM: Copy item key = 3
10/09/2015 10:01:32 AM HTTP JVM: Return allItems [ca.wfsystems.core.PaymentItem@4e664e66, ca.wfsystems.core.PaymentItem@52aa52aa, ca.wfsystems.core.PaymentItem@543a543a]

这看起来正确并标识了 3 个 PaymentItem;

getter 和 setter 是:

public Date getExpPayDate() {
return expPayDate;
}

public void setExpPayDate(Date expPayDate) {
this.expPayDate = expPayDate;
}

但是,虽然重复显示 3 行(理应如此),但它会显示最后一个项目的日期 3 次,而不是每个 pItem 中的不同日期:

显示

2015 年 8 月 28 日
2015年8月28日
2015 年 8 月 28 日

而不是

2015 年 9 月 15 日
2015 年 9 月 4 日
2015年8月28日

最佳答案

顺便说一句,请查看entrySet 和keySet 以获得更好的方式来循环遍历Map。我假设您只想获取 map 中的所有键值?它们返回一组您可以循环访问的条目或键。

for (Map.Entry<String, String> entry : map.entrySet())
{
System.out.println(entry.getKey() + "/" + entry.getValue());
}

关于java - 使用 arrayList 作为 XPages 中重复控件的源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32507582/

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