Xpages formRow上的OnChange事件部分刷新
在internet上找不到任何有用的内容,因此: 我在数字字段中有一个OnChange事件,它将更新我页面上的两个元素:Xpages formRow上的OnChange事件部分刷新,xpages,xpages-extlib,xpages-ssjs,Xpages,Xpages Extlib,Xpages Ssjs,在internet上找不到任何有用的内容,因此: 我在数字字段中有一个OnChange事件,它将更新我页面上的两个元素: -首先,面板中包含的用于显示不同货币的computedField会被更新,这很正常。 -其次,如果数字字段中的值大于某个值x,则应重新计算/更新next formRow的标签(动态计算),以显示星号,并要求提供一些信息来解释此超标 在更改的OnComplete事件中,我试图通过数字字段提供的ID刷新formRow, <xp:eventHandler event="onc
-首先,面板中包含的用于显示不同货币的computedField会被更新,这很正常。
-其次,如果数字字段中的值大于某个值x,则应重新计算/更新next formRow的标签(动态计算),以显示星号,并要求提供一些信息来解释此超标 在更改的OnComplete事件中,我试图通过数字字段提供的ID刷新formRow,
<xp:eventHandler event="onchange" submit="true" refreshMode="partial" refreshId="panelOtherCurrency" disableValidators="true">
<xp:this.onComplete>
<![CDATA[XSP.partialRefreshGet("#{id:formRowExceedanceReason}", {});]]>
</xp:this.onComplete>
</xp:eventHandler>
但我收到了错误消息“更新某些页面时出错。没有id为…:formRowExceedanceReason的要提交的元素”
因此,我发现formRow的id未发布/不为HTML代码所知。由于不能在formTables中的formRow周围使用面板(根据我的经验,它们只是被忽略/根本不呈现),有没有其他方法可以刷新此formRow或formRow的标签(内置解决方案)
提前谢谢 似乎实现这一点的唯一方法是将需要更新其标签的formRow放入另一个formTable中,并通过OnComplete事件刷新它…您可能是对的。当我使用formtable/formrows时,我确实遇到了一些相同的问题——尽管我的行有一个重复控件(我最终对行进行了“手工编码”——而且效果很好) 不过,我建议尝试将formrow的id用作refreshId,以确保问题的原因确实与formrow的id有关。如果有效,则尝试在完成时刷新其他字段 显然,另一个选项可能是在“更高”级别刷新id,例如formtable。这可能不适合您的应用程序,但也可以用作查找问题所在的方法 顺便问一下(重读你的问题)——你完全确定你的id拼写正确吗?您是否尝试过改用XSP.partialRefreshPost(…)呢?据我所知,在这种情况下,它不应该真的有什么不同——但消息只是表明了一些关于“提交…”;-)
/John创建另一个
formTable
只是部分更新行的标签是不够优雅的。如果标签是在onComplete
事件期间需要刷新的唯一元素,则可以省略formRow
标记的label
属性,而使用标签方面。在那里,您可以为标签指定一个id,该id将在输出HTML标记中呈现
请考虑以下事项:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
xmlns:xe="http://www.ibm.com/xsp/coreex">
<xp:panel id="panelOtherCurrency">
<xp:text value="You entered #{viewScope.field1Value} in numberField"
rendered="#{not empty viewScope.field1Value}" />
</xp:panel>
<xe:formTable id="formTable1">
<xe:formRow id="numberRow" label="Number Row">
<xp:inputText id="numberField" value="#{viewScope.field1Value}">
<xp:eventHandler event="onchange" submit="true"
refreshMode="partial" refreshId="panelOtherCurrency">
<xp:this.onComplete>
XSP.partialRefreshGet('#{id:labelExceedanceReason}');
</xp:this.onComplete>
</xp:eventHandler>
</xp:inputText>
</xe:formRow>
<xe:formRow id="formRowExceedanceReason">
<xp:this.facets>
<xp:text id="labelExceedanceReason" xp:key="label"
styleClass="control-label" style="font-weight: 700">
<xp:this.value>
#{viewScope.field1Value gt 100 ?
'You should explain this' :
'It\'s ok, nevermind'
}
</xp:this.value>
</xp:text>
</xp:this.facets>
<xp:inputText id="inputText2" />
</xe:formRow>
</xe:formTable>
</xp:view>
XSP.partialRefreshGet('#{id:labelExceedanceReason}');
#{viewScope.field1Value gt 100?
“你应该解释一下”
“没关系,没关系”
}
嗨,John,谢谢你的回答,我在OnComplete事件(formRowExceedanceReason)中调用的id是我给formRow的id,它不起作用。我现在的解决方案是将formRow放入自己的formTable中,并刷新它,正如您所建议的,它基本上处于“更高”的级别。