在xe:dialog(XPages扩展库对话框)中,我想使用XSP.partialRefreshPost函数,但是刷新时输入的值会丢失。

下面的示例演示该问题。

  • ComboBox1,inputText1,ComboBox2,inputText2:可以,但是不在xe:dialog
  • ComboBox3,inputText3:可以,但不使用XSP.partialRefreshPost
  • ComboBox4,inputText4: NOK ,因为它在xe:dialog
  • 中使用XSP.partialRefreshPost函数

    我尝试更改属性xe:dialog失败。

    如何在xe:dialog中使用XSP.partialRefreshPost进行刷新,好吗?

    谢谢

    <?xml version="1.0" encoding="UTF-8"?>
    <xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xe="http://www.ibm.com/xsp/coreex">
        <xp:label id="label1" value="refresh partial"></xp:label>
        <xp:comboBox id="comboBox1">
            <xp:selectItems>
                <xp:this.value><![CDATA[#{javascript:return ["1", "2", "3"];}]]></xp:this.value>
            </xp:selectItems>
            <xp:eventHandler event="onchange" submit="true" refreshMode="partial"refreshId="comboBox1">
            </xp:eventHandler>
        </xp:comboBox>
        <xp:inputText id="inputText1">
            <xp:eventHandler event="onchange" submit="true" refreshMode="partial" refreshId="inputText1">
            </xp:eventHandler>
        </xp:inputText>
        <xp:br></xp:br>
        <xp:label id="label2" value="refresh XSP.partialRefreshPost"></xp:label>
        <xp:comboBox id="comboBox2">
            <xp:selectItems>
                <xp:this.value><![CDATA[#{javascript:return ["1", "2", "3"];}]]></xp:this.value>
            </xp:selectItems>
            <xp:eventHandler event="onchange" submit="false">
                <xp:this.script><![CDATA[XSP.partialRefreshPost("#{id:comboBox2}", {immediate: true});]]></xp:this.script>
      </xp:eventHandler>
        </xp:comboBox>
        <xp:inputText id="inputText2">
            <xp:eventHandler event="onchange" submit="false">
                <xp:this.script><![CDATA[XSP.partialRefreshPost("#{id:inputText2}", {immediate: true});]]></xp:this.script>
            </xp:eventHandler>
        </xp:inputText>
        <xp:br></xp:br>
        <xe:dialog id="dialog1" partialRefresh="true">
            <xp:label id="label3" value="refresh partial"></xp:label>
            <xp:comboBox id="comboBox3">
                <xp:selectItems>
                    <xp:this.value><![CDATA[#{javascript:return ["1", "2", "3"];}]]></xp:this.value>
                </xp:selectItems>
                <xp:eventHandler event="onchange" submit="true"
                    refreshMode="partial" refreshId="comboBox3">
                </xp:eventHandler>
            </xp:comboBox>
            <xp:inputText id="inputText3">
                <xp:eventHandler event="onchange" submit="true"
                     refreshMode="partial" refreshId="inputText3">
                </xp:eventHandler>
            </xp:inputText>
            <xp:br></xp:br>
            <xp:label id="label4" value="refresh XSP.partialRefreshPost"></xp:label>
            <xp:comboBox id="comboBox4">
                <xp:selectItems>
                    <xp:this.value><![CDATA[#{javascript:return ["1", "2", "3"];}]]></xp:this.value>
                </xp:selectItems>
                <xp:eventHandler event="onchange" submit="false">
                    <xp:this.script><![CDATA[XSP.partialRefreshPost("#{id:comboBox4}", {immediate: true});]]></xp:this.script>
                </xp:eventHandler>
            </xp:comboBox>
            <xp:inputText id="inputText4">
                <xp:eventHandler event="onchange" submit="false">
                    <xp:this.script><![CDATA[XSP.partialRefreshPost("#{id:inputText4}", {immediate: true});]]></xp:this.script>
                </xp:eventHandler>
            </xp:inputText>
        </xe:dialog>
        <xp:button id="button1" value="dialog">
            <xp:eventHandler event="onclick" submit="false">
                <xp:this.script><![CDATA[XSP.openDialog('#{id:dialog1}');]]></xp:this.script>
            </xp:eventHandler>
        </xp:button>
    </xp:view>
    

    最佳答案

    partialRefreshPost不能在<xe:dialog>中按预期方式工作,例如,当您在组合框中选择一个值时,partialRefreshPost会将更改事件中的选定值发送到服务器,但是服务器的响应包含旧值,并且组合框值跳回到旧值。即使将字段绑定到像作用域变量这样的数据也无济于事。

    但是有一种解决方法。将参数 execId 添加到partialRefreshPost中:

    XSP.partialRefreshPost("#{id:comboBox4}",
           {execId: "#{id:comboBox4}", immediate: true})
    

    指定要刷新的元素,在这种情况下,请指定为相同(comboBox4)。这样,它将按预期工作-就像在对话框外部一样。

    08-07 19:13