Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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
xpages组合框值在部分刷新后设置为null_Xpages_Xpages Ssjs - Fatal编程技术网

xpages组合框值在部分刷新后设置为null

xpages组合框值在部分刷新后设置为null,xpages,xpages-ssjs,Xpages,Xpages Ssjs,我最近有些头痛,只是有点提神 在onChange事件中,组合框触发对面板的部分刷新(用于呈现该面板中的字段): <xp:comboBox value="#{Contr.txt_tipcontractcv}" id="txt_tipcontractcv1"> <xp:selectItems id="selectItems1"> <xp:this.value><![CDATA[#{ja

我最近有些头痛,只是有点提神

在onChange事件中,组合框触发对面板的部分刷新(用于呈现该面板中的字段):

    <xp:comboBox value="#{Contr.txt_tipcontractcv}" id="txt_tipcontractcv1">

        <xp:selectItems id="selectItems1">
                        <xp:this.value><![CDATA[#{javascript:return ""}]]></xp:this.value>
        /xp:selectItems>
        <xp:selectItems id="selectItems2">
                        <xp:this.value><![CDATA[#{javascript:@DbColumn(@DbName(),"SetupvwTipuriContracteC",1);}]]></xp:this.value>
        </xp:selectItems>
        <xp:eventHandler event="onchange" submit="true">
                    <xp:this.script><![CDATA[XSP.partialRefreshGet("#{id:FisaP}", {

    });
    ]]>             </xp:this.script>
        </xp:eventHandler>
</xp:comboBox>

/xp:selectItems>
以及面板和字段的代码:

<xp:panel id="FisaP">
            <xp:label id="label4">
                <xp:this.value><![CDATA[#{javascript:"Fisa contract "+ Contr.getItemValueString("txt_tipcontractcv1")}]]></xp:this.value>
                <xp:this.rendered><![CDATA[#{javascript:
            Contr.getItemValueString("txt_tipcontractcv1") == "Vanzare-Cumparare"
         }]]></xp:this.rendered>

            </xp:label>
        </xp:panel>


但是,当我选择一个值时,似乎会触发部分刷新,但combobox值立即为null,并且会对xpage进行完全刷新,并且不会显示面板中的字段。我错过了什么?

您的onchange活动所做的远远超出您的预期:

  • partialRefreshGet()表示您正在对 面板但因为它是partialRefreshGet(),所以不能通过 用户正在进行的任何更改。所以服务器不知道有什么 用户所做的更改
  • submit=“true”表示在任何更新之后,它将对页面进行完全刷新 你正在运行的CSJS。这就是删除用户拥有的任何东西 在页面的任意位置输入
  • 我认为您需要submit=“false”来运行您的CSJ

    如果要在onchange运行之前立即考虑浏览器上的更改,请不要使用partialRefreshGet。而是使用:

    <xp:eventHandler event="onchange" submit="true" refreshMode="partial" refreshId="FisaP" disableValidators="true">
            </xp:eventHandler>
    
    
    

    转换器仍在运行,因此如果您将文本等放入数字字段,它仍将失败。

    I add submit=“false”,但部分刷新似乎不再运行。我是否也应该修改XSP.partialRefreshGet()?它在Firefox的网络选项卡(或浏览器的相关开发工具)上显示了什么?这还应该确认submit=“true”是否导致完全刷新。我必须检查。奇怪的是,这种技术工作得非常好——从现在起它就不再工作了。它在那里工作是因为它正在对页面进行完全重新加载(submit=“true”)。partialRefreshGet()根本没有运行。如果使用submit=“false”,将运行partialRefreshGet,并且仅触发渲染响应阶段。如果使用submit=“true”,则所有六个生命周期阶段都会运行,而partialRefreshGet不会运行(记录的第一个阶段是还原视图,而不是呈现响应)。所有这些阶段都将包括验证,如果验证失败,组合框将不会更新。我建议使用SSJS debugger或其他调试工具查看标签计算中的值。当partialRefreshGet运行并触发渲染响应阶段时,它只是执行get,因此,就服务器而言,combobox值是不变的。这与您的问题无关,但我强烈建议您尽可能少使用样式标记。您应该在CSS样式表中创建一个类。这不仅是一个更好的web实践,而且还将使读取XSP标记变得更容易,因为那里的总体代码更少。