Xpages ComboBox onBlur可使用函数刷新其他组合框的值

Xpages ComboBox onBlur可使用函数刷新其他组合框的值,xpages,Xpages,我有一个xpage,上面有5个字段。每个字段在onBlur事件中都有代码来刷新它下面的组合框的值。我现在必须向这个应用程序添加更多字段,我不想为每个字段编写刷新代码。相反,我想创建一个函数,它接受我所在字段的参数,并使用循环进行刷新 我好像没法让它工作。下面是我在onBlur事件中使用的代码。我不知道将此代码放入脚本库中的语义,该脚本库可以访问每个组合框并在循环中调用刷新代码 有什么想法吗 <xp:comboBox id="vendorAppAdvSkills1"> <xp:s

我有一个xpage,上面有5个字段。每个字段在onBlur事件中都有代码来刷新它下面的组合框的值。我现在必须向这个应用程序添加更多字段,我不想为每个字段编写刷新代码。相反,我想创建一个函数,它接受我所在字段的参数,并使用循环进行刷新

我好像没法让它工作。下面是我在onBlur事件中使用的代码。我不知道将此代码放入脚本库中的语义,该脚本库可以访问每个组合框并在循环中调用刷新代码

有什么想法吗

<xp:comboBox id="vendorAppAdvSkills1">
<xp:selectItem itemLabel="-Select a Category-"
itemValue="-Select a Category-"></xp:selectItem>
<xp:selectItems>
<xp:this.value><![CDATA[#{javascript:getComponent( "vendorAppSkills1" ).getValue();}]]></xp:this.value>
</xp:selectItems>
<xp:eventHandler event="onblur" submit="false">
<xp:this.script><![CDATA[
XSP.partialRefreshPost("#{id:panelVendorAppSkills2}", 
{ 
onComplete: function() 
{ 
XSP.partialRefreshPost("#{id:panelVendorAppSkills3}",
{ 
onComplete: function() 
{ 
XSP.partialRefreshPost("#{id:panelVendorAppSkills4}",
{ 
onComplete: function() 
{ 
XSP.partialRefreshPost("#{id:panelVendorAppSkills5}",
{ 
onComplete: function() 
{ 
XSP.partialRefreshPost("#{id:panelNextFinish}",
{ 
} )
}
} )
}
} )
}
} )
}
} );]]></xp:this.script>
</xp:eventHandler>
</xp:comboBox>

您的XPage上有验证吗?如果是这样,验证将阻止任何部分刷新运行

如果可能,只需将eventHandler的刷新ID设置为包含所有组合框的区域。这只需要从浏览器到服务器进行一次部分刷新

使用当前代码,您将调用5次部分刷新,每次将浏览器的全部内容发布到服务器上,每次更新整个页面,但只是将单个组件推回。性能不会很好,因此单一刷新区域是更好的实践(并且更容易编码!)


作为最佳实践,除非您阻止验证,否则还应确保刷新区域包含显示错误控件。否则,您的用户(包括测试时的您)将不知道验证是否失败。

我有一个表,第一列包含组合框,我将根据以前的选择更新它们的值。如果第一个条目中有5个条目,并且用户选择了nbr 2,我将从下面的其他组合框中删除nbr 2,然后根据选择计算一些总值。我想我必须刷新每个组合框的值,并且每个组合框上的总值会发生变化。因此,每个组合框上都有partialrefresh。我不刷新组合框或字段,而是刷新包含每个组合框和总计字段的面板。如果有更好的方法,请让我知道!!!!因为我使用的是一张桌子,所以我只能在每张桌子上放置面板。这是非常麻烦的,因此我希望使用函数刷新所有组合框和刷新时的总值。除了使用partialrefresh方法之外,我不知道该怎么做。对于如何通过脚本库函数更新表的任何建议,我们都将不胜感激。您是否试图更新它们的值(即存储在底层dominoDocument或其他数据源中的内容)或它们的选项(即用户可以从中选择的内容)?如果您正在更新它们的值,最佳做法是跳过组件并更新数据源,如果您的刷新区域覆盖了所有组合框,则值将更新。如果要更新选项,请计算选项,如果刷新区域覆盖所有组合框,则选项将更新。如果使用xp:table,可以向其中添加一个id,并将其用于部分刷新的refreshId属性我使用的是xp:table,因此,如果我添加一个id并刷新该表,是否可以调用该id一次,然后表中的每个组合框都将刷新?而不是我现在所做的手动调用每个组合框的刷新?是的,刷新区域内的每个组件都将被更新(但也会被验证)