将自定义属性定义为数据对象

时间:2015-09-26 18:10:46

标签: java object xpages

在我的付款输入控件上发现了问题。有一个小的计算文本字段失败但没有抛出错误。刚刚停止了整个过程。在任何情况下删除computedText,它现在可以工作。将pItem返回到自定义控件的compositeData公式仍然经常触发,但我无法弄清楚如何阻止它。这是所有内存驻留,所以它可能不是一个主要的性能命中,但仍然..... ...

这个问题是我上一个问题的后续问题,我将尝试改进这个问题 defining an object property in a compositeData on a custom control

这是我想要做的事情的照片: enter image description here

重复控件绑定到由Java方法Payments.getAllItems(LinkKey)生成的arrayList,并且可以正常工作。重复中的按钮非常简单,它只是将viewScope.vsShowPayment = true和vsRIndex设置为重复索引值,因此我知道我们正在使用的ArrayList中的哪个元素。然后刷新panelPaymentContainer,隐藏重复并呈现自定义控件ccTestPayment。 ccTestPayment有一个名为pItem的自定义属性,类型为java.lang.Object,代码如下:

<xc:ccTestPaymentInput rendered="#{javascript:(viewScope.vsShowPayment)}">
                <xc:this.pItem><![CDATA[#{javascript:try{
        var debug:Boolean = true;
        if (debug) print("Open existing row = " + viewScope.vsRIndex)
        rIndex = parseInt(viewScope.vsRIndex.toString());
        if (debug) print("rIndex = " + rIndex);
        pItem = Payments.getItem(rIndex);
        return pItem;

}catch(e){
    print("Failure in Custom Prop of add item " + e.toString());
    return null;
}}]]></xc:this.pItem>
</xc:ccTestPaymentInput>

Payments Payments.getItem(rIndex)类中的方法然后从PaymentItems的ArrayList返回PaymentItem对象,并在自定义控件中显示它们。自定义控件中的字段绑定到compositeData.pItem.getPaymentDate等,到目前为止一切都很酷。

我可以编辑自定义控件上的任何字段,并且一切正常。但是,当我按下“保存”按钮时,其中没有任何代码被执行。

try{
print("Start Payment save");
var debug:Boolean = true;

var pos:Integer = parseInt(viewScope.vsRIndex.toString());
if (debug) print("Working with pos = " +  pos + " Call saveThisItem");

if (Payments.saveThisItem(compositeData.pItem , pos)){
    if (debug) print("save Payments Worked ");
}else{
    if (debug) print("save Payments FAILED ");
}

}catch(e){
    print("payment save Error " + e.tostring);

}finally{
    viewScope.vsExpPayDate = null;
    viewScope.vsShowPayment = false;
    viewScope.remove("vsRIndex");
    viewScope.remove("vsGotItem")
}

没有任何打印语句被触发。我怀疑它有关于如何定义pItem的事情。自定义属性背后的代码一次又一次地被解雇,我想知道这是否会妨碍。

1 个答案:

答案 0 :(得分:0)

保存无效的原因是控件上有一个生成错误的计算文本字段。问题是客户端和控制台上没有报告错误消息。经过大量的头部刮擦后,我注意到文件已经不再显示它应该具有的值。删除了字段和保存,其他一切开始工作。 关于调用进程的次数问题,我想我已经解决了很多进程。我在重复内移动控件ccTestPaymentInput.xsp。它现在可以直接访问当前的&#39; PaymentItem对象,所以我可以访问teh repeat var = pItem,这是我想要使用的PaymentItem对象。干净,比我做的简单得多。唯一必要的刷新是与rpeat控制相关的,我无能为力。