Xpages 嵌套的 dojo 选项卡容器重复带有复选框组的 dojo 选项卡面板 - 不更新

Xpages nested dojo tab container repeat dojo tab panel with checkboxgroup - does not update

您好,我是 Xpages 的新手,遇到了一个问题,我在搜索后找不到相关的问题/答案(请参阅搜索词的标题)。

如果能深入了解如何解决以下问题,我将不胜感激。

我有一个 3 个 Dojo 选项卡容器嵌套,每个容器包含一个带有 Dojo 选项卡控件的重复容器,最里面的选项卡控件带有一个标准的 checkBoxGroup。

选项卡的计算标签是从 multi-dimensional sessionScope 变量中读取的,最终维度包含为 checkBoxGroup 计算的 'label|value' 对。数据绑定到文档。

我可以在各个选项卡和 select/deselect 复选框之间切换,并且在选项卡之间来回切换时状态仍然被跟踪。然而,这就是症结所在,只有最后一个选项卡上的 checkBoxGroup 值在提交时被写回基础文档,其他最里面选项卡上显示的 checkBoxGroup 值被忽略。

如有任何关于如何解决此问题的建议指导,我们将不胜感激。

    <xe:djTabContainer id="djTabContainer1"
                        style="height:600px;width:1200.0px"
                        doLayout="false">
                        <xe:this.rendered><![CDATA[#{javascript:control = getComponent("STP2radioGroup1");
control2 = getComponent("STP2radioGroup2");

if (control == null || control2 == null){return false;};

val = control.getValue();
val2 = control2.getValue();

if (val == "None" || val2 == "All") {
    false ;
}                           
else {
    true;
}}]]></xe:this.rendered>
                        <xp:repeat id="repeat1" rows="30"
                            value="${sessionScope.GHC}" var="GHCTabs" first="0"
                            indexVar="GHCTabIndex" repeatControls="true">
                            <xe:djTabPane id="djTabPane1"
                                title="#{javascript:GHCTabs}">
                                <xe:this.rendered><![CDATA[#{javascript:!empty(sessionScope.Services[GHCTabIndex])}]]></xe:this.rendered>
                                <xe:djTabContainer id="djTabContainer2"
                                    style="height:550px" doLayout="false">
                                    <xp:repeat id="repeat3" rows="30"
                                        value="${sessionScope.Enviro}" var="EnviroTabLables"
                                        indexVar="EnviroTabIndex" first="0" repeatControls="true">
                                        <xe:djTabPane id="djTabPane2"
                                            title="#{javascript:EnviroTabLables}">
                                            <xe:this.rendered><![CDATA[#{javascript:!empty(sessionScope.Services[GHCTabIndex][EnviroTabIndex])}]]></xe:this.rendered>
                                            <xe:djTabContainer
                                                id="djTabContainer3" style="height:500px"
                                                doLayout="false">
                                                <xp:repeat id="repeat2"
                                                    rows="30" value="${sessionScope.Aspect}" var="AspectTabs"
                                                    indexVar="AspectTabIndex" first="0"
                                                    repeatControls="true">
                                                    <xe:djTabPane
                                                        id="djTabPane3" title="#{javascript:AspectTabs}">
                                                        <xe:this.rendered><![CDATA[#{javascript:try{
if (sessionScope.Services[GHCTabIndex][EnviroTabIndex][AspectTabIndex] == null){false}
else
{true}
}
catch(e){
dBar.error("Error in 'Visible' property for Aspect Tab for checkBoxGroup - " + e.toString)}}]]></xe:this.rendered><xp:checkBoxGroup
                                                            id="checkBoxGroup1" styleClass="threeColumnCheckboxGroup"
                                                            value="#{Subscription.Services}" style="width:100.0%">
                                                            <xp:selectItems>
                                                                <xp:this.value><![CDATA[${javascript:try{
if (sessionScope.Services[GHCTabIndex][EnviroTabIndex][AspectTabIndex] == null){
dBar.error("sessionScop.Services["+GHCTabIndex+"]["+EnviroTabIndex+"]["+AspectTabIndex+"] = null")}
else
{sessionScope.Services[GHCTabIndex][EnviroTabIndex][AspectTabIndex]}
}
catch(e){
dBar.error("checkBoxGroup")}}]]></xp:this.value>
                                                            </xp:selectItems>
                                                        </xp:checkBoxGroup>






                                                </xe:djTabPane>
                                            </xp:repeat>
                                        </xe:djTabContainer>
                                    </xe:djTabPane>
                                </xp:repeat>
                            </xe:djTabContainer>
                        </xe:djTabPane>
                    </xp:repeat>
                </xe:djTabContainer>

repeat 的所有行都绑定到同一个sessionScope 变量。这意味着它们将 替换 而不是 附加到 作用域变量。

要在重复中绑定可编辑字段,您需要按照 Tim 的回答 to this question 做一些事情。我建议在所有重复项上设置 repeatControls="true",以便在加载页面时创建和绑定行。使用动态绑定的组件可能会得到不可预测的结果,因为在初始加载之后,它是从组件到存储值的任何位置的单向映射。如果重复的顺序发生变化,组件值不会,因此值将与您期望的值不一致。