Xpages 如何在保存时循环并从所有组件中获取值

Xpages 如何在保存时循环并从所有组件中获取值,xpages,xpages-ssjs,view-scope,Xpages,Xpages Ssjs,View Scope,我有一个带有重复控件的XPage,它的值来自viewScope向量 <xp:repeat id="repeat1" rows="100" indexVar="i" value="#{javascript:viewScope.v1}" </xp:repeat> 字段绑定到向量,如下所示 <xp:inputText value="#{viewScope.v3[i]}" id="qty" style="width:80px"</xp:inputText> 通过在

我有一个带有重复控件的XPage,它的值来自viewScope向量

<xp:repeat id="repeat1" rows="100" indexVar="i" value="#{javascript:viewScope.v1}"
</xp:repeat>
字段绑定到向量,如下所示

<xp:inputText value="#{viewScope.v3[i]}" id="qty" style="width:80px"</xp:inputText>
通过在输入框上使用onChange事件,我成功地获得了正确的更新。像这样的

<xp:eventHandler event="onchange" submit="true" refreshMode="partial" refreshId="qty">
                                            <xp:this.action><![CDATA[#{javascript:var v3:java.util.Vector = viewScope.v3
v3.setElementAt(getComponent("qty").getValue(),i)
viewScope.v3 = v3;

    }]]></xp:this.action>
                                        </xp:eventHandler>
问题是onChange事件正在更新inputfield,因此,如果用户键入速度过快,输入的值将丢失,他们需要再次键入

因此,我正在寻找一种方法来循环viewScope,并在save按钮中设置所有行值

因此,在我的“保存”按钮中,我想循环viewScope中的值,并将它们全部放在一个新的向量中,以便写入文档字段。基本上,我需要获得用户使用getComponent.getValue为SSJS循环中的每一行输入的值


如何操作。

如果“保存”按钮使用正确的执行模式/id组合执行提交,则值已正确保存

您没有说明最初选择使用onchange事件提交新值的原因,但附带问题(用户的新值有时会被擦除)可以通过将refreshMode属性设置为norefresh来声明事件来解决。这将指示框架进行提交,而不是销毁和重新创建事件生成的输入字段。这可能正是您想要的,除非您想要为无效值提供视觉反馈,如果在调用之前不在客户端使用JavaScript执行的话。我还可以看到,您没有将execMode声明为partial,因此向服务器发送了超出评估所需的内容。记住使用它

话虽如此,这将起作用,并尊重您最初的想法。不要介意我为测试目的添加的不同名称和console.log行:

<xp:repeat value="#{repeatBean.quantities}" indexVar="index">
    <xp:inputText id="inputQty" value="#{repeatBean.quantities[index]}">
        <xp:eventHandler event="onchange" submit="true"
            execMode="partial" refreshMode="norefresh" script="console.log(Date.now())" />
    </xp:inputText>
</xp:repeat>

你说得很对,当我删除onChange时也很好。
<xp:repeat value="#{repeatBean.quantities}" indexVar="index">
    <xp:inputText id="inputQty" value="#{repeatBean.quantities[index]}" />
    <br/>
</xp:repeat>

<xp:button id="button1" value="Label">
    <xp:eventHandler event="onclick" submit="true"
        refreshMode="partial" refreshId="showMe" action="#{repeatBean.save}" />
</xp:button>

<br/>

<xp:text id="showMe" value="#{repeatBean.quantities}" />