Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Combobox 部分刷新时出现XPages组合框值问题_Combobox_Xpages_Lotus Domino_Xpages Ssjs - Fatal编程技术网

Combobox 部分刷新时出现XPages组合框值问题

Combobox 部分刷新时出现XPages组合框值问题,combobox,xpages,lotus-domino,xpages-ssjs,Combobox,Xpages,Lotus Domino,Xpages Ssjs,我有2个组合框和1个输入文本字段。在更改第一个组合时,我在输入字段中设置了一些值,并部分刷新输入字段所在的面板 完成此刷新后,我将使用XSP partialRefreshPost部分刷新第二个组合框的面板。您可以看到,这个组合框值只是第一个组合的值 问题是: 组合值已设置,但输入值未设置!尽管输入的面板刷新是第一位的,并且在完成时组合的面板刷新也是第一位的。如果我从第二个组合的值选项卡中删除代码,那么输入字段就会工作。或者,如果我只是从第二个组合框中删除第一个组合框的引用,那么它会再次工作 奇怪

我有2个组合框和1个输入文本字段。在更改第一个组合时,我在输入字段中设置了一些值,并部分刷新输入字段所在的面板

完成此刷新后,我将使用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>

有什么想法吗?

试着这样做,将控件绑定到viewScope,然后就可以工作了

我总是将我的组件绑定到范围变量、字段或bean上,因为如果不绑定,可能会遇到很多奇怪的值问题。这是我的经验


我已经测试了您的代码,我的建议在我看来是可行的。

尝试执行此操作,将控件绑定到viewScope,然后就可以工作了

我总是将我的组件绑定到范围变量、字段或bean上,因为如果不绑定,可能会遇到很多奇怪的值问题。这是我的经验


我已经测试了您的代码,我的建议在我看来是可行的。

使用组合框时,列表中的第一个值是所选值。使用列表框时,必须首先从列表中选择一个值。如果您选择一个值,您的示例也将失败

由于您正在以编程方式更改combobox/listbox的允许值,然后尝试设置一个不再在列表中的值,因此在执行部分刷新时,该值会发回服务器,因此会发生验证错误,并且不会在后端设置inputText“aaaaa”的值


您可以在面板中添加xp:messages组件,然后可以看到错误消息。

使用组合框时,列表中的第一个值是所选值。使用列表框时,必须首先从列表中选择一个值。如果您选择一个值,您的示例也将失败

由于您正在以编程方式更改combobox/listbox的允许值,然后尝试设置一个不再在列表中的值,因此在执行部分刷新时,该值会发回服务器,因此会发生验证错误,并且不会在后端设置inputText“aaaaa”的值


您可以在面板中添加xp:messages组件,然后可以看到错误消息。

我注意到,将组合框绑定到托管bean不会使用部分刷新更新其值。将组合框绑定到viewscope会使用部分刷新更新选项。我注意到,将组合框绑定到托管bean不会使用部分刷新更新其值。将组合框绑定到viewscope会使用部分刷新更新选项。