Xpages formRow上的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

在internet上找不到任何有用的内容,因此:

我在数字字段中有一个OnChange事件,它将更新我页面上的两个元素:
-首先,面板中包含的用于显示不同货币的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中,并刷新它,正如您所建议的,它基本上处于“更高”的级别。