Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将arrayList用作XPages中重复控件的源_Java_Xpages_Repeat - Fatal编程技术网

Java 将arrayList用作XPages中重复控件的源

Java 将arrayList用作XPages中重复控件的源,java,xpages,repeat,Java,Xpages,Repeat,我开发了一个名为paybj的javabean,它被定义为一个HashMap,其中PaymentItem是一个类,它定义了与每个付款相关的许多字段。payObj最初是从一些相关的Notes文档填充的。所有这些都非常有效。我在payObj.allItems()中有一个方法,它返回PaymentItem的ArrayList——也许有更好的方法来获取它们,但现在可以这样做: public ArrayList<PaymentItem> allItems(){ ArrayList<

我开发了一个名为paybj的javabean,它被定义为一个
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());
}