0

我的 xpage 中有一个部分,默认情况下它是打开的。当我关闭该部分并进行部分刷新时,它会再次打开该部分。

有没有简单的方法来防止这种情况。

4

1 回答 1

0

呵呵,根据您的问题,我构建了一个小型 XPage 来测试我在这里评论的是我得到的:

<xp:panel id="refresh">
    <xp:section id="section1" initClosed="false">
        <xp:panel id="innerRefresh">Section content</xp:panel>
    </xp:section>
</xp:panel>

<xp:button value="refresh inner div" id="button3">
    <xp:eventHandler event="onclick" submit="true" refreshMode="partial"
        refreshId="innerRefresh">
        <xp:this.action><![CDATA[#{javascript://refresh}]]></xp:this.action>
    </xp:eventHandler>
    </xp:button>

<xp:button value="refresh outer div" id="button4">
    <xp:eventHandler event="onclick" submit="true" refreshMode="partial"
        refreshId="refresh">
        <xp:this.action><![CDATA[#{javascript://refresh}]]></xp:this.action>
    </xp:eventHandler>
    </xp:button>

<xp:button value="refresh section" id="button1">
    <xp:eventHandler event="onclick" submit="true" refreshMode="partial"
        refreshId="section1">
        <xp:this.action><![CDATA[#{javascript://refresh}]]></xp:this.action>
    </xp:eventHandler></xp:button>

    <xp:button value="full refresh" id="button2">
    <xp:eventHandler event="onclick" submit="true" refreshMode="complete">
        <xp:this.action><![CDATA[#{javascript://refresh}]]></xp:this.action>
    </xp:eventHandler></xp:button>

通过尝试以不同的方式刷新部分,如果我按下每个按钮一次或两次,中间间隔大约一秒,我没有发现任何异常,但如果你多次按下“刷新部分”按钮,该部分会再次打开。此效果适用于我的 IE8 和 Firefox 19.0.2。我建议在您的部分周围使用面板/div 并刷新它而不是部分 direkt。

更新:

试试这个,它最多可以创建 3 个动态部分,每个部分都可以通过自己的按钮刷新,它们将保持关闭状态,

<xp:this.beforePageLoad><![CDATA[#{javascript:var sectioncount:java.util.Vector = @Explode("1,2,3",",");
viewScope.put("sectioncount",sectioncount);
viewScope.put("selectedSection", sectioncount)

}]]></xp:this.beforePageLoad>

<xp:checkBoxGroup id="checkBoxGroup1"
        value="#{viewScope.selectedSection}">
        <xp:this.defaultValue><![CDATA[#{javascript:return viewScope.get( "sectioncount" );}]]></xp:this.defaultValue>
        <xp:eventHandler event="onchange" submit="true"
            refreshMode="complete">
            <xp:this.action><![CDATA[#{javascript:// full update //partial update}]]></xp:this.action>
        </xp:eventHandler>
        <xp:selectItems>
            <xp:this.value><![CDATA[#{javascript:return viewScope.get( "sectioncount" );}]]></xp:this.value>
        </xp:selectItems>
</xp:checkBoxGroup>


    <xp:repeat id="repeat2" rows="30" var="varcollection"
        repeatControls="true">
        <xp:this.value><![CDATA[#{javascript:return viewScope.get( "sectioncount" );}]]></xp:this.value>
            <xp:panel>
                            <xp:this.rendered><![CDATA[#{javascript:var vec:java.util.Vector = viewScope.get( "selectedSection" );
return @IsMember(varcollection,vec);
}]]></xp:this.rendered>
                            <xp:button value="refresh this section:" id="button3">
                <xp:eventHandler event="onclick" submit="true" refreshMode="partial"
                    refreshId="refresh">
                    <xp:this.action><![CDATA[#{javascript://refresh}]]></xp:this.action>
                </xp:eventHandler>
                </xp:button>
                <xp:panel id="refresh">
                    <xp:section id="section1" initClosed="false">
                        <xp:panel id="innerRefresh">

                            <xp:text>
                                <xp:this.value><![CDATA[#{javascript:var date:java.util.Date = new java.util.Date;
return date.toTimeString()}]]></xp:this.value>
                            </xp:text></xp:panel>
                    </xp:section>                   
                </xp:panel>
                </xp:panel>
     </xp:repeat>
于 2013-05-29T13:33:39.180 回答