将重复索引参数传递给验证阶段监听器

时间:2016-04-01 19:10:45

标签: xpages

我有一个带有各种XPage链接的重复控件。我在各个字段级别设置了验证。如果用户导航到上一个链接(页面),我试图找到一种方法来禁用所有验证。我遇到的一个想法是使用阶段监听器。我尝试将repeatIndex参数传递给阶段侦听器以确定是否禁用验证(如果repeatIndex< currentPageIndex然后禁用验证)。但是,单击链接时似乎没有传递repeatIndex:

<xp:repeat
    id="Repeat"
    indexVar="repeatIndex"
    rows="30"
    var="repeatData">
    <xp:this.value><![CDATA[#{javascript:["Link 1", "Link 2"];}]]></xp:this.value>
    <xp:link
        escape="true"
        text="#{javascript:repeatData}"
        id="Link">
        <xp:eventHandler
            event="onclick"
            submit="true"
            refreshMode="complete">
        </xp:eventHandler>
        <xp:this.parameters>
            <xp:parameter
                name="repeatIndex">
                <xp:this.value><![CDATA[#{javascript:repeatIndex;}]]></xp:this.value>
            </xp:parameter>
        </xp:this.parameters>
    </xp:link>
</xp:repeat>

是否有可能以某种方式将repeatIndex传递给阶段监听器?有没有更好的方法来解决这个问题?感谢您的任何提示。

1 个答案:

答案 0 :(得分:1)

就服务器端而言,标准重复控件仅包含一组组件。重复之外没有可用的索引,在迭代时设置并销毁一行。

如果检查是否应启用验证取决于行的可用内容,则可以在链接的eventHandler上计算disableValidatorsimmediate属性。但请记住,计算需要在服务器端发生,并在呈现页面时将结果传递给浏览器,因此您将无法考虑自该部分以来所做的任何更改页面最后传递给浏览器。

如果你想从外面访问重复,你可以设置repeatControls="true",它基本上为页面的组件树(页面的服务器端地图)是重复的每个元素重现一组组件。加载。然后,您可以将id属性设置为“Link#{repeatData}”,这样您就可以获得Link0,Link1等。但由于组件集是硬编码的,因此您将无法使用寻呼机进行更改每行绑定的数据。