运行XSP.partialRefreshPost时阻止验证

时间:2018-02-06 21:05:09

标签: xpages jquery-select2

在xpage中我有两个select2列表。第一个选择框中的选项指示第二个选择框中的选项。

列表是通过列表框控件定义的。

为了将select2应用于它们,我有一个scriptblock

$(document).ready(
    function(){
        x$("#{id:list1}").select2();
    }
)
$(document).ready(
    function(){
        x$("#{id:list2}").select2();
    }
)
$(document).ready(
    function(){
        x$("#{id:list1}").on("change", function(e) {
            XSP.partialRefreshPost("#{id:pnlList2}"
})

pnlList2包含第二个列表框。

问题是当第一个列表框的值发生变化时,会触发第二个列表的验证。

我尝试申请参数:

'params': {
    'disableVal':'true'
}

但是这不能按预期工作。

任何人都有建议吗?

1 个答案:

答案 0 :(得分:2)

有几种方法可以解决这个问题,但我更喜欢表现最好的方法,即部分执行。部分执行应该是强制性的最佳实践。

您的代码会发生这样的情况:您在验证整个页面的同时刷新页面的一部分。通过这样做,第二个选择被捕获而没有价值。

我会为组合框定义onchange参数 - 而不是事件处理程序 - 这样select2会自动获取事件,而不会像以后那样通过JavaScript声明它。

只需使用:

<xp:combobox onchange=“XSP.partialRefreshPost('#{id:select2Id}', { execId: '#{id:select1Id}' }”

正如我所说,select2会看到以这种方式声明的onchange并尊重它。当它将仅触发时,将评估combobox1,从而自动跳过页面上的任何其他验证,因为不包括在内。此时第二个选择不会抱怨并刷新。

另一个建议是使用select2重新初始化第二个组合框,因为部分刷新会破坏它。最好扩展部分刷新区域以包括特定于第二个选择的组合框和scriptBlock。