如何保存时循环并从重复所有组件获取值(How to loop and get the values

2019-10-30 02:56发布

我有一个重复控件从viewScope矢量获取其值的XPage。

<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和保存按钮将所有的行值来替代。

所以在我的保存按钮,我想循环的viewScope的值,并把它们放在一个新的Vector,我可以写文档字段。 基本上我需要使用getComponent用户照耀处的值(“”)的持有。的getValue()用于在SSJS循环每一行。

我怎样才能做到这一点。

Answer 1:

该值如果您保存按钮执行与正确的执行模式/ ID组合提交已经正确保存。

你没有说明为什么你最初选择与提交新值的原因onchange事件,但抵押品的问题,即用户的新的价值观得到有时候抹了一个,可以通过声明与事件克服refreshMode属性设置为norefresh 。 这将指示框架做了提交,而不是破坏并重新创建从生成事件的输入字段。 除非你想给视觉反馈的无效值,如果不与之前的JavaScript调用执行客户端这可能正是你想要的东西。 我还可以看到,你是不是在声明execModepartial从而发送一个以上有必要到服务器进行评估。 请记住,使用它。

有塔虽这么说,这将工作和尊重您最初的想法(不介意不同的名称和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>

即使你选择后一种方式,我不明白你的就是你的调用保存方法时获得新的价值观保持关注。 viewScope.v1将肯定包含所有提交的值已经,没有必要遍历组件来获得这种新的价值; 他们已经在那里你v1 Vector 。 考虑下面的(同样不介意不同的变量名):

<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}" />


文章来源: How to loop and get the values from all the components in a repeat when saving