Xpages 当动态组合框的项目得到更新时,它不会更新其绑定scopevar
我用组合框遇到了一些麻烦。下面是一个复制/粘贴示例代码来演示我的问题Xpages 当动态组合框的项目得到更新时,它不会更新其绑定scopevar,xpages,Xpages,我用组合框遇到了一些麻烦。下面是一个复制/粘贴示例代码来演示我的问题 <xp:this.beforeRenderResponse><![CDATA[#{javascript:// viewScope.value1 = "document.getItemValueString('value1')" + viewScope.document; viewScope.value2 = "document.getI
<xp:this.beforeRenderResponse><![CDATA[#{javascript://
viewScope.value1 = "document.getItemValueString('value1')" + viewScope.document;
viewScope.value2 = "document.getItemValueString('value2')" + viewScope.document;}]]>
</xp:this.beforeRenderResponse>
<xp:button
value="change document"
id="button1">
<xp:eventHandler
event="onclick"
submit="true"
refreshMode="complete">
<xp:this.action><![CDATA[#{javascript: viewScope.document = new Date().getMilliseconds()//}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
<br></br>
<xp:comboBox id="comboBox1" value="#{viewScope.value3}">
<xp:selectItems>
<xp:this.value><![CDATA[#{javascript:viewScope.value1;}]]></xp:this.value>
</xp:selectItems>
<xp:selectItems>
<xp:this.value><![CDATA[#{javascript:viewScope.value2;}]]></xp:this.value>
</xp:selectItems>
<xp:eventHandler
event="onchange" submit="true" refreshMode="complete">
<xp:this.action><![CDATA[#{javascript://}]]></xp:this.action>
</xp:eventHandler>
</xp:comboBox>
<br></br>
<xp:text escape="true" id="computedField1" value="#{viewScope.value1}"></xp:text>
<br></br>
<xp:text escape="true" id="computedField2" value="#{viewScope.value2}"></xp:text>
<br></br>
<xp:text escape="true" id="computedField3" value="#{viewScope.value3}"> </xp:text>
我试图实现的是:我有一个组合框,其中包含两个或更多计算的selectItems。它们取决于当前选择的文档。为了演示文档的切换,我在本例中使用了ButtonChange文档。选择新文档时,beforeRenderResponse事件
从文档中获取itemvalues并将它们放入viewscope变量中。我必须将这两个值分开,以便不能对它们使用数组。到目前为止一切正常,但是:如果我选择一个值,例如value2timestamp1,并执行切换文档,则组合框绑定到的viewScope.value3不会更新。
它显示上一个文档中的旧值2,直到触发其onChange事件
如何强制组合框使用其selectItems更新其viewScope变量?找到了一个至少适用于我的copy/pase示例的解决方案:
<xp:this.beforeRenderResponse><![CDATA[#{javascript://
viewScope.value1 = "document.getItemValueString('value1')" + viewScope.document;
viewScope.value2 = "document.getItemValueString('value2')" + viewScope.document;
var list = new Array();
list.push(value1);
list.push(value2);
if(!@IsMember(viewScope.value3,list)){
viewScope.value3 = list[0];//list.pop();
}}]]>
</xp:this.beforeRenderResponse>
现在,如果文档被更改,viewScope.value3将更改为value1。似乎beforeRenderResponse太晚了,无法更改它。我已经考虑过这一点,但事实是,如果我在beforeRenderResponse中添加以下行,那么更改项目的时间已经足够早了:例如viewScope.value3=value1我也可以更改它,但我遇到了问题用户输入被覆盖。我想我必须阅读value3并验证它是否是新selectItems的成员。。。