Java 将arrayList用作XPages中重复控件的源
我开发了一个名为paybj的javabean,它被定义为一个Java 将arrayList用作XPages中重复控件的源,java,xpages,repeat,Java,Xpages,Repeat,我开发了一个名为paybj的javabean,它被定义为一个HashMap,其中PaymentItem是一个类,它定义了与每个付款相关的许多字段。payObj最初是从一些相关的Notes文档填充的。所有这些都非常有效。我在payObj.allItems()中有一个方法,它返回PaymentItem的ArrayList——也许有更好的方法来获取它们,但现在可以这样做: public ArrayList<PaymentItem> allItems(){ ArrayList<
HashMap
,其中PaymentItem是一个类,它定义了与每个付款相关的许多字段。payObj最初是从一些相关的Notes文档填充的。所有这些都非常有效。我在payObj.allItems()中有一个方法,它返回PaymentItem的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;
}
}
所以看起来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>
这看起来是正确的,并确定了3个付款项目
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以获得更好的地图循环方式。我想你只是想得到地图上所有的键值?它们返回一组可循环使用的条目或键
for (Map.Entry<String, String> entry : map.entrySet())
{
System.out.println(entry.getKey() + "/" + entry.getValue());
}
for(Map.Entry:Map.entrySet())
{
System.out.println(entry.getKey()+“/”+entry.getValue());
}
顺便说一句,查看entrySet和keySet以获得更好的地图循环方式。我想你只是想得到地图上所有的键值?它们返回一组可循环使用的条目或键
for (Map.Entry<String, String> entry : map.entrySet())
{
System.out.println(entry.getKey() + "/" + entry.getValue());
}
for(Map.Entry:Map.entrySet())
{
System.out.println(entry.getKey()+“/”+entry.getValue());
}
请参见上面我的编辑。不确定是什么导致了问题,但似乎已经解决了。它现在正在工作,如图所示请参见上面的我的编辑。不确定是什么导致了问题,但似乎已经解决了。它现在的工作方式如图所示如果向getExtPayDate方法添加一个sysout,它是否会按预期打印出不同的值?这可能是因为,虽然它们是三个不同的对象,但expPayDate的设置不正确。顺便说一句,有一种更快的方法可以将地图作为ArrayList获取。返回新的ArrayList(internalMap,values())尽管如此,日期是否奇怪,因此我同意Jesse的观点,尝试在加载时在allItems中添加一些println来打印日期,然后在加载后循环通过ArrayList,ArrayList看起来已加载correctly@BillF旁白:既然你提到它是一颗豆子,为了保持bean约定,您希望将属性称为allItems,并使用公共getter,例如-getAllItems()
(与名为allItems()
的方法相反)。在您的绑定中,您可以通过EL使用value=“#{javascript:payObj.allItems()}”
而不是xp:repeat
,将其绑定到value=“#{payObj.allItems}”
。这是一种更为普遍接受的JavaBean约定,尽管您所做的工作很有效。您的代码非常适合我。如果您向getExtPayDate方法添加sysout,它是否会按预期打印出不同的值?这可能是因为,虽然它们是三个不同的对象,但expPayDate的设置不正确。顺便说一句,有一种更快的方法可以将地图作为ArrayList获取。返回新的ArrayList(internalMap,values())尽管如此,日期是否奇怪,因此我同意Jesse的观点,尝试在加载时在allItems中添加一些println来打印日期,然后在加载后循环通过ArrayList,ArrayList看起来已加载correctly@BillF旁白:既然你提到它是一颗豆子,为了保持bean约定,您希望将属性称为allItems,并使用公共getter,例如-getAllItems()
(与名为allItems()
的方法相反)。在您的绑定中,您可以通过EL使用value=“#{javascript:payObj.allItems()}”
而不是xp:repeat
,将其绑定到value=“#{payObj.allItems}”
。这是一种更为普遍接受的JavaBean约定,尽管您所做的工作很有效。您的代码对我来说非常适合。
public Date getExpPayDate() {
return expPayDate;
}
public void setExpPayDate(Date expPayDate) {
this.expPayDate = expPayDate;
}
for (Map.Entry<String, String> entry : map.entrySet())
{
System.out.println(entry.getKey() + "/" + entry.getValue());
}