2014-10-06 104 views
3

我试图从重复控制字段中设置一个值到一个字段(它不在重复控件中)。xpages从重复字段中设置一个值到字段

从重复场:

<xp:inputText id="inputText2" disabled="true"> 
     <xp:this.value><![CDATA[#{viewScope.field_2[index]}]]></xp:this.value> 
     <xp:eventHandler event="onchange" submit="true" 
        refreshMode="partial" refreshId="sus"> 
        <xp:this.action><![CDATA[#{javascript:getComponent("inputText4").setValue("1234");}]]></xp:this.action> 
     </xp:eventHandler> 
</xp:inputText> 

而且目标字段,你可以看到,是在面板内部,ID = “SUS”。

此外,目标字段绑定到表单字段。

但没有赋值。我怎样才能做到这一点?

+0

您的SSJS是否被触发? – 2014-10-06 12:24:03

+1

@PaulStephenWithers在同一个事件中我添加了另一行:getComponent(“inputText1”)。setValue(“1234”)//其中inputText1是一个重复字段。该值已被添加到此字段中,但不是上述字段(该字段在重复控制之外) – 2014-10-06 12:45:30

+0

您是否还有重复中的inputText4控件? – 2014-10-06 12:58:11

回答

3

组件仅仅是数据模型的可视化。始终绑定到您的控件上,并追踪模型值,而不是组件。禁用的inputText无法触发值,并且在上面的代码段中有disabled="true"。 onchange事件不能触发。

这会工作:

<xp:inputText id="inputText2" disabled="false"> 
    <xp:this.value><![CDATA[#{viewScope.field_2[index]}]]></xp:this.value> 
    <xp:eventHandler event="onchange" submit="true" 
       refreshMode="partial" refreshId="sus"> 
       <xp:this.action><![CDATA[#{javascript:viewScope.someValue=42;}]]></xp:this.action> 
    </xp:eventHandler> 
</xp:inputText> 

你的目标控制将是这样的:

<xp:inputText id="inputText4" value="#{viewScope.someValue}"> 
</xp:inputText> 

如果你的目标控件绑定到别的东西(如#{document1.test}),他们是你的代码需要更新那个。 (document1.replaceItemValue("test",42)

同样3个重要方面:

  1. UI元素后,千万不要走,总是落后更新绑定模型(又名:聊到的数据,而不是UI又名:控制器更新的模式,而不是视图)
  2. 确保你的目标是刷新的部分字段
  3. 残疾人字段不触发事件

让我们知道它是如何发展的

+0

感谢您的回复。 1.我在未禁用的字段的onChange事件中添加了问题代码,但仍然没有工作。 2.向viewScope添加一个值后,我怎样才能将它传递到已绑定到表单域的相应字段(从重复之外)? – 2014-10-07 04:55:27

+0

完整的代码将产生完整的答案。您没有提到您的目标字段绑定到数据源。不会改变很多解决方案。与数据交谈,而不是用户界面!解决方案更新超过 – stwissel 2014-10-07 05:07:29

+0

谢谢你的伟大提示和解释。祝你今天愉快。 – 2014-10-07 05:22:44