XPages中的嵌套重复控件

XPages中的嵌套重复控件,xpages,Xpages,我有一种情况,我有一组嵌套的重复控件。我想做的是在关闭对话框后,只刷新重复控件的选定部分。我可以在对话框的隐藏方法中将要刷新的元素指定为参数,如下所示: dialog1.hide(“repeat1”) 其中,dialog1是对话框的组件名称,repeat1是要刷新的repeat控件的组件名称 如果刷新顶层,则所有下级都将刷新。如果刷新第二个级别,则仅刷新级别2重复控件的第一个匹配项。同样,如果刷新第三个级别,则仅刷新第三个级别的第一个匹配项 似乎没有明显的方法来刷新,比如说,只有第二级重复控件或

我有一种情况,我有一组嵌套的重复控件。我想做的是在关闭对话框后,只刷新重复控件的选定部分。我可以在对话框的隐藏方法中将要刷新的元素指定为参数,如下所示:

dialog1.hide(“repeat1”)

其中,
dialog1
是对话框的组件名称,
repeat1
是要刷新的repeat控件的组件名称

如果刷新顶层,则所有下级都将刷新。如果刷新第二个级别,则仅刷新级别2重复控件的第一个匹配项。同样,如果刷新第三个级别,则仅刷新第三个级别的第一个匹配项

似乎没有明显的方法来刷新,比如说,只有第二级重复控件或第三级重复控件。有人了解这种行为吗

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xe="http://www.ibm.com/xsp/coreex">
    <xp:br></xp:br>
    <xp:panel id="panel1">
        <xp:button value="Label" id="button3">
            <xp:eventHandler event="onclick" submit="true"
                refreshMode="partial" refreshId="dialog1">
                <xp:this.action><![CDATA[#{javascript:getComponent("dialog1").show();}]]></xp:this.action>
            </xp:eventHandler>
        </xp:button>
        <xp:br></xp:br>
        <xp:text escape="true" id="computedField4" value="#{javascript:@Now()}">
            <xp:this.converter>
                <xp:convertDateTime type="both"></xp:convertDateTime>
            </xp:this.converter>
        </xp:text>
        <xp:repeat id="repeat1" rows="30" var="rowdata" style="border:1px solid red"
            repeatControls="true" removeRepeat="true">
            <xp:this.value><![CDATA[#{javascript:[1, 2, 3]}]]></xp:this.value>
            <xp:text escape="true" id="computedField1" value="#{javascript:rowdata}">
                <xp:this.converter>
                    <xp:convertNumber type="number" integerOnly="true">
                    </xp:convertNumber>
                </xp:this.converter>
            </xp:text>
            &#160;-&#160;
            <xp:text escape="true" id="computedField7" value="#{javascript:@Now()}">
                <xp:this.converter>
                    <xp:convertDateTime type="both"></xp:convertDateTime>
                </xp:this.converter>
            </xp:text>
            <xp:br></xp:br>
            <xp:repeat id="repeat2" rows="30" var="rowdata"
                style="margin:1em; border:1px solid green" repeatControls="true"
                removeRepeat="true">
                <xp:this.value><![CDATA[#{javascript:["a", "b", "c"]}]]></xp:this.value>
                <xp:text escape="true" id="computedField2" value="#{javascript:rowdata}">
                    <xp:this.converter>
                        <xp:convertNumber type="number" integerOnly="true">
                        </xp:convertNumber>
                    </xp:this.converter>
                </xp:text>
                &#160;-&#160;
                <xp:text escape="true" id="computedField5" value="#{javascript:@Now()}">
                    <xp:this.converter>
                        <xp:convertDateTime type="both"></xp:convertDateTime>
                    </xp:this.converter>
                </xp:text>
                <xp:br></xp:br>
                <xp:repeat id="repeat3" rows="30" var="rowdata"
                    style="margin:1em; border:1px solid orange" repeatControls="true"
                    removeRepeat="true">
                    <xp:this.value><![CDATA[#{javascript:[1, 2, 3]}]]></xp:this.value>
                    <xp:text escape="true" id="computedField3" value="#{javascript:rowdata}">
                        <xp:this.converter>
                            <xp:convertNumber type="number" integerOnly="true">
                            </xp:convertNumber>
                        </xp:this.converter>
                    </xp:text>
                    &#160;-&#160;
                    <xp:text escape="true" id="computedField6" value="#{javascript:@Now()}">
                        <xp:this.converter>
                            <xp:convertDateTime type="both"></xp:convertDateTime>
                        </xp:this.converter>
                    </xp:text>
                    <xp:br></xp:br>
                </xp:repeat>
            </xp:repeat>
        </xp:repeat>
    </xp:panel>
    <xe:dialog id="dialog1" title="Dialog box">
        <xp:panel>
            <xe:dialogButtonBar id="dialogButtonBar1">
                <xp:panel>
                    <xp:button value="OK - Refresh repeat1" id="button1">
                        <xp:eventHandler event="onclick" submit="true"
                            refreshMode="complete">
                            <xp:this.action><![CDATA[#{javascript:getComponent("dialog1").hide("repeat1")}]]></xp:this.action>
                        </xp:eventHandler>
                    </xp:button>
                    <xp:button value="OK - Refresh repeat2" id="button4">
                        <xp:eventHandler event="onclick" submit="true"
                            refreshMode="complete">
                            <xp:this.action><![CDATA[#{javascript:getComponent("dialog1").hide("repeat2")}]]></xp:this.action>
                        </xp:eventHandler>
                    </xp:button>
                    <xp:button value="OK - Refresh repeat3" id="button2">
                        <xp:eventHandler event="onclick" submit="true"
                            refreshMode="complete">
                            <xp:this.action><![CDATA[#{javascript:getComponent("dialog1").hide("repeat3")}]]></xp:this.action>
                        </xp:eventHandler>
                    </xp:button>
                </xp:panel>
            </xe:dialogButtonBar>
        </xp:panel>
    </xe:dialog>
</xp:view>

 - 
 - 
 - 

您是否考虑过在repeats中放置一个面板(或最终是一个自定义控件),而不是以repeat为目标,而是以面板为目标。有许多例子可以帮助您做到这一点:

在repeats内部,您可能希望将本地id(生成的id)添加到本地JS对象中,这样您就拥有了完全的控制权。让我们知道进展如何