使用函数刷新其他ComboBox的值



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

我似乎不能让这个工作。下面是我在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次局部刷新,每次将浏览器的整个内容发送到服务器,每次更新整个页面,但只是推回一个单独的组件。性能不会很好,所以单一刷新区域是更好的做法(也更容易编码!)。

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

最新更新