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

标签 java object xpages

在我的付款输入控件上发现了问题。有一个小的计算文本字段失败,但没有抛出错误。刚刚停止了整个过程。无论如何,删除了计算文本,它现在可以工作了。将 pItem 返回到自定义控件的 compotoData 公式仍然经常触发,但我不知道如何阻止它。它全部驻留在内存中,因此可能不会对性能造成重大影响,但仍然......

这个问题是我上一个问题的后续问题,我会尽力完善这个问题 defining an object property in a compositeData on a custom control

这是我正在尝试做的事情的图片: enter image description here

重复控件绑定(bind)到由 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 对象,并将它们显示在自定义控件中。自定义控件中的字段绑定(bind)到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 的定义方式有关。自定义属性背后的代码一次又一次地被触发,我想知道这是否会妨碍。

最佳答案

保存不起作用的原因是控件上有一个计算文本字段生成了错误。问题是客户端和控制台都没有报告错误消息。经过一番绞尽脑汁后,我注意到提交的文本不再显示应有的值。删除该字段并保存,其他一切都开始工作。 关于进程调用次数的问题,我想我已经解决了其中的许多问题。我将控件 ccTestPaymentInput.xsp 移动到重复中。现在,它可以直接访问“当前”PaymentItem 对象,因此我可以访问重复 var=pItem,这是我想要使用的 PaymentItem 对象。比我所做的干净而且简单得多。唯一需要的刷新是与 rpeat 控件相关的刷新,对此我无能为力。

关于java - 将自定义属性定义为数据对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32800372/

相关文章:

java - Android中的观察者模式与数据同步

java - 使用 eclipse 和 tomcat 7 运行和部署 servlet

java - 支柱 2 : There is no Action mapped for namespace [/]

javascript - 如果日期为空,Xpages 如何检查 javascript?

java - ActionListener - 如何调用它们并向它们发送值

java - 如何在Ubuntu中运行TinyB库?

java - 尝试将 Object 转换为 EMF EObject 时出现 ClassCastException?

python - 访问创建另一个类的类

javascript - 显示对象内容 - JS/jQuery

java - 如何使用 Java 从 URL 链接获取 xsp 值