我有2个组合框和1个输入文本字段。在更改第一个组合时,我在输入字段中设置了一些值,并部分刷新了输入字段所在的面板。
这个刷新的OnComplete,我部分刷新(使用XSP partialRefreshPost)第二个组合框的面板。您可以看到此组合框值只是第一个组合的值。
问题是: 组合值已设置但输入值不是!虽然输入的面板刷新是第一次完成,但是组合面板刷新。如果我从第二个组合的值选项卡中删除代码,则输入字段有效。 (或者,如果我只是从第二个组合框中删除第一个组合框的参考,那么它再次起作用。)
奇怪的是: 如果我使用列表框而不是第二个组合框,那么它可以工作!!
xpage设计是:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:table>
<xp:tr>
<xp:td>
<xp:comboBox id="comboBox1">
<xp:selectItem itemLabel="a" itemValue="a"></xp:selectItem>
<xp:selectItem itemLabel="b" itemValue="b"></xp:selectItem>
<xp:selectItem itemLabel="c" itemValue="c"></xp:selectItem>
<xp:eventHandler event="onchange" submit="true"
refreshMode="partial" refreshId="panel1">
<xp:this.action><![CDATA[#{javascript:var inputText1:com.ibm.xsp.component.xp.XspInputText = getComponent("inputText1");
inputText1.setValue("aaaaaa");}]]></xp:this.action>
<xp:this.onComplete><![CDATA[alert("refreshed panel1");
XSP.partialRefreshPost("#{id:panel0}",{onComplete: function(){alert("refreshed panel0");}});]]></xp:this.onComplete>
</xp:eventHandler></xp:comboBox></xp:td>
<xp:td></xp:td>
</xp:tr>
<xp:tr>
<xp:td></xp:td>
<xp:td></xp:td>
</xp:tr>
</xp:table>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:panel id="panel0">
<xp:comboBox id="comboBox2">
<xp:selectItems>
<xp:this.value><![CDATA[#{javascript:var comboBox1:com.ibm.xsp.component.xp.XspSelectOneMenu = getComponent("comboBox1");
if(comboBox1.getValue()!=null){
return comboBox1.getValue().toString();
}else{
return "its empty";
}}]]></xp:this.value>
</xp:selectItems>
</xp:comboBox></xp:panel>
<xp:br></xp:br>
<xp:panel id="panel1">
<xp:inputText id="inputText1"></xp:inputText>
</xp:panel>
<xp:br></xp:br>
<xp:br></xp:br></xp:view>
只需用此替换第二个组合,然后看....
<xp:listBox id="listBox1">
<xp:selectItems>
<xp:this.value><![CDATA[#{javascript:var comboBox1:com.ibm.xsp.component.xp.XspSelectOneMenu = getComponent("comboBox1");
if(comboBox1.getValue()!=null){
return comboBox1.getValue().toString();
}else{
return "its empty";
}}]]></xp:this.value>
</xp:selectItems>
</xp:listBox>
有什么想法吗?
答案 0 :(得分:0)
尝试将控件绑定到viewScope,然后它应该可以工作。
我总是将我的组件绑定到范围变量,字段或bean,因为如果你不能解决很多奇怪的价值问题。这是我的经历。
我已经对您的代码进行了测试,我的建议就可以看到。