2015-01-15 41 views
3

在xe:對話框(XPages Extension Library對話框)中,我想使用XSP.partialRefreshPost函數,但是當刷新輸入的值時會丟失。在XPages Extension Library對話框中使用XSP.partialRefreshPost函數

以下示例說明了此問題。

  • ComboBox1,inputText1,ComboBox2,inputText2:OK,但不是在一個XE:對話框
  • ComboBox3,inputText3:因爲它使用XSP NOK:OK,但不使用XSP.partialRefreshPost
  • ComboBox4,inputText4 .partialRefreshPost函數xe:對話框

我嘗試更改屬性xe:dialog沒有成功。

如何在xe:對話框中使用XSP.partialRefreshPost來刷新OK?

感謝

<?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> 
+0

這是完整的源代碼嗎?我看不到附加的數據源,因爲您的值可能會丟失,因爲服務器無法將它們中的任何一個保存在內存中。 – 2015-01-15 17:26:44

+0

爲什麼在inputText2的onchange事件期間對inputText2進行部分刷新?而且,就像奧利弗提到的那樣,你在哪裏存儲數據?你至少應該使用一個作用域變量來保存數據。 – 2015-01-15 17:50:55

+0

這只是一個例子來顯示部分刷新的問題 – JMR 2015-01-19 09:34:15

回答

9

partialRefreshPost如預期<xe:dialog>無法正常工作,例如,當您在組合框中選擇一個值,則partialRefreshPost上改變事件所選擇的值發送給服務器,但服務器的響應包含舊值並且組合框值會跳回舊值。即使將該字段綁定到像數據變量這樣的數據也無濟於事。

但有一個解決方法。添加參數execIdpartialRefreshPost

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

指定要刷新的元素,在這種情況下,相同的(comboBox4)。這樣它就能按預期工作 - 就像在對話框外面一樣。

+0

它的工作原理!非常感謝你 – JMR 2015-01-19 09:30:28