Xpages 重复控件中具有默认值的编辑框在删除时不会更新

Xpages 重复控件中具有默认值的编辑框在删除时不会更新,xpages,repeat,editbox,Xpages,Repeat,Editbox,我有一个Repeat控件,其中有一个已传递默认值的编辑框。有一个Delete按钮可以删除该行 为了测试,我在编辑框中使用了一个计算字段。计算字段也传递了与编辑框相同的值。现在,计算字段和编辑框都有相同的值,当我随机单击“删除”按钮时,它会被删除,但只有计算字段会在“重复控制”中正确更新 如果是编辑框,则显示最后一条记录消失。 所以问题是,编辑框中的值不会像计算字段那样得到更新 <?xml version="1.0" encoding="UTF-8"?> <xp:view xm

我有一个Repeat控件,其中有一个已传递默认值的编辑框。有一个Delete按钮可以删除该行

为了测试,我在编辑框中使用了一个计算字段。计算字段也传递了与编辑框相同的值。现在,计算字段和编辑框都有相同的值,当我随机单击“删除”按钮时,它会被删除,但只有计算字段会在“重复控制”中正确更新

如果是编辑框,则显示最后一条记录消失。 所以问题是,编辑框中的值不会像计算字段那样得到更新

 <?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">

    <xp:this.data>
        <xp:dominoDocument var="document1" formName="testing">
        </xp:dominoDocument>
    </xp:this.data>
    <xp:inputText id="inputText1" multipleSeparator=",">
        <xp:this.defaultValue><![CDATA[#{javascript:var v:java.util.Vector = new java.util.Vector();
v.add('1');v.add('2');v.add('3');v.add('4');v.add('5');v.add('6');
return v;}]]></xp:this.defaultValue>
    </xp:inputText>
    <xp:br></xp:br>
    <xp:repeat id="repeat1" rows="30" var="r" indexVar="i" first="0">
        <xp:this.value><![CDATA[#{javascript:return getComponent("inputText1").getValue();}]]></xp:this.value>
        <xp:br></xp:br>
        <xp:div style="text-align:center">
            <xp:label value="#{javascript:r}" id="label1"
                style="text-align:center">
            </xp:label>
            <xp:button value="Delete" id="button1">
                <xp:eventHandler event="onclick" submit="true"
                    refreshMode="complete">
                    <xp:this.action><![CDATA[#{javascript:var v:java.util.Vector = getComponent("inputText1").getValue();
if(v != null){
var sdtString =  getComponent("inputText2").getValue();
if(v.contains(sdtString))
v.remove(sdtString);
};}]]></xp:this.action>
                </xp:eventHandler>
            </xp:button>
            <xp:inputText id="inputText2">
                <xp:this.defaultValue><![CDATA[#{javascript:getComponent("label1").getValue();}]]></xp:this.defaultValue>
            </xp:inputText>
        </xp:div>
        <xp:br></xp:br>
    </xp:repeat>
</xp:view>
如问题的第一部分所述,由于我们使用默认值设置字段,因此不会更新字段。但是,根据建议,我们尝试使用脚本库设置字段,虽然脚本库工作得很好,但可能看起来很愚蠢,但它会弄乱日期字段。当我们使用以下方法设置值时:

var d:java.util.Date = new java.util.Date(compositeData.selectedDate);
getComponent("from").setValue(d);
它混淆了月份、日期和年份字段,并显示了一个完全不同的值(相同的代码作为默认值时运行良好)

希望这是有意义的


任何类型的解决方案都可以接受。

InputExt2的
defaultValue
在第一页加载时只执行一次。然后,XPage存储了repeat 1已输入ext2
defaultValue
1,repeat 2已输入ext2
defaultValue
2,依此类推

示例:如您在打印日志中所看到的,在删除第3行和以后的第1行后,不会再次计算InputExt2的
defaultValue

将其旋转并在label1的
值中设置InputExt2的值
代码:

        <xp:label
            value="#{javascript:getComponent('inputText2').setValue(r); r}"
            id="label1"
            style="text-align:center">
        </xp:label>

然后它将正确设置InputExt2的值。您不再需要InputExt2的
defaultValue
属性

或者,您可以定义InputExt2的
属性,并将其绑定到特定于行的数据源或viewScope变量。

如您在“编辑1真实场景”中所述,您希望编辑和删除日期对。我创建了以下示例。为了简单起见,我使用字符串代替日期。将日期保留在viewScope变量中,并在此处编辑/删除它们:



将viewScope变量创建为对象数组。

谢谢,这确实解决了这里的问题,但是,在实际场景中,我们有多个字段(精确地说是第节和两个日期),第二个日期取决于第一个日期的值,在第一次重复之后,它将崩溃,因为它不会更新。另一种方法是使用隐藏字段设置所有内容,但是,这是一种好方法吗?另外,关于绑定,这些字段存在于一个自定义控件中,该控件在repeat控件中迭代,并且所有绑定都是使用自定义属性设置的,所以我相信替代方法在这里不起作用?如果我错了,请纠正我。抱歉,让我也打断一下,因为我们正在处理同一件事。首先,非常感谢您的回复。绑定已建立为“compositeData.dataSource[compositeData.from]”,并且有必要在保存事件上存储所有值。因此,据我所知,我们不能接受最后的建议,对吗?如果我错了,请纠正我。很抱歉,我不得不回滚我的自定义控件建议,因为它对本例没有意义,因为您需要在删除按钮中访问自定义控件的InputExt2值。我觉得您的测试示例过于简化了实际代码。您定义了什么样的数据源,重复值到底是什么?多值字段?文档?嗯,…删除功能似乎工作正常。,.我们找到了解决方法..我们在迭代器中动态获取值,方法是使用索引变量从迭代的向量中提取值。很难在这里共享代码..就好像我共享的大多数字段都依赖于设置文档,并且会在您这边崩溃。。将编辑问题,并解释真实场景。。
        <xp:label
            value="#{javascript:getComponent('inputText2').setValue(r); r}"
            id="label1"
            style="text-align:center">
        </xp:label>