我有一个包含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>
答案 0 :(得分:0)
您对XPage有验证吗?如果是这样,验证将阻止任何部分刷新运行。
如果可能,只需将eventHandler的刷新ID设置为包含所有组合框的区域。这只会从浏览器调用一次部分刷新到服务器。
使用当前代码,您将调用5次部分刷新,每次将浏览器的全部内容发布到服务器,每次更新整个页面,但只是推回单个组件。性能不会很好,因此单个刷新区域是更好的练习(以及更容易编码!)。
作为最佳实践,除非您阻止验证,否则还要确保刷新区域包含“显示错误”控件。否则,您的用户(包括您在测试时)将不知道验证是否失败。