在互联网上找不到任何有用的东西,所以:
我在一个数字字段中有一个OnChange事件,它将更新我页面上的两个元素:
- 首先,更新显示不同货币的面板中包含的computedField - 工作正常
- 第二,如果数字字段中的值大于某个值x,则应重新计算/更新下一个formRow的标签(动态计算)以显示星号,并要求提供一些信息来解释此超出。
我尝试通过数字' s字段OnChange的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>
但是我收到错误消息&#34;更新部分页面时发生错误。没有用id ...提交的元素:formRowExceedanceReason&#34;。
因此,我发现HTML代码不会发布/知道formRow的ID 因为你不能在formTables中使用formRows周围的面板(根据我的经验,它们只是被忽略/根本没有渲染),有没有人用另一种方式刷新这个formRow或formRow的标签(内置解决方案有利)?
提前谢谢!答案 0 :(得分:0)
似乎实现这一目标的唯一方法是将需要更新标签的formRow放入另一个formTable并通过OnComplete事件刷新...
答案 1 :(得分:0)
你可能是对的。当我使用formtable / formrows时,我确实遇到了一些相同的问题 - 虽然我对我的行进行了重复控制(我最终“手动编码”了行 - 并且它运行良好)。
我建议的一件事是尝试使用formrow的id作为refreshId - 只是为了确保问题的原因确实与formrow的id有关。如果可行,则尝试刷新onComplete ...
上的其他字段显然,另一种选择可能是刷新“较高”级别的id,例如表格。这可能不适合您的应用,但也可以用作找出问题所在的方法。
顺便说一句(只是重新阅读你的问题) - 你完全确定你正确拼写了这个ID吗?您是否尝试过使用XSP.partialRefreshPost(...)?根据我的理解,它不应该在这种情况下真正有所作为 - 但是这条消息只是表明“提交......”; - )
/约翰
答案 2 :(得分:0)
创建另一个formTable
只是为了部分更新行的标签不够优雅。如果标签是您在onComplete
事件期间需要刷新的唯一元素,则可以省略label
标记的formRow
属性,而是使用标签facet。在那里,您可以为标签指定一个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>