在formRow上OnChange事件部分刷新

时间:2014-04-10 08:01:50

标签: xpages xpages-extlib xpages-ssjs

在互联网上找不到任何有用的东西,所以:

我在一个数字字段中有一个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的标签(内置解决方案有利)?

提前谢谢!

3 个答案:

答案 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>