在我的付款输入控件上发现了问题。有一个小的计算文本字段失败,但没有抛出错误。刚刚停止了整个过程。无论如何,删除了计算文本,它现在可以工作了。将 pItem 返回到自定义控件的 compotoData 公式仍然经常触发,但我不知道如何阻止它。它全部驻留在内存中,因此可能不会对性能造成重大影响,但仍然......
这个问题是我上一个问题的后续问题,我会尽力完善这个问题 defining an object property in a compositeData on a custom control
重复控件绑定(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/