2012-04-03 56 views
0

基于Tim Tripcony的建议,我已经实现了一个简单的xpage下面,允许我扩展no。当用户点击“添加更多”按钮时显示的字段。当“添加更多”按钮进行局部刷新并扩展“否”时,我遇到了不记得数据的局部刷新问题。的行。XPages更多的领域在点击按钮问题部分刷新

<?xml version="1.0" encoding="UTF-8"?> 
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" dojoForm="true"> 
    <xp:this.data> 
     <xp:dominoDocument var="newDoc" formName="frmAddMore"></xp:dominoDocument> 
    </xp:this.data> 
    <xp:this.afterPageLoad><![CDATA[#{javascript:viewScope.rowCount = new java.lang.Integer(5);}]]></xp:this.afterPageLoad> 
    <xp:div id="parentDiv"> 
     <xp:repeat indexVar="fieldSuffix" value="#{viewScope.rowCount}" 
      rows="#{viewScope.rowCount}" var="row"> 
      <xp:div> 
       <xp:inputText id="KeyNo"> 
        <xp:this.value><![CDATA[#{newDoc["KeyNo_#{fieldSuffix}"]}]]></xp:this.value> 
       </xp:inputText> 
       <xp:inputText id="Qty"> 
        <xp:this.value><![CDATA[#{newDoc["Quantity_#{fieldSuffix}"]}]]></xp:this.value> 
       </xp:inputText> 
      </xp:div> 
     </xp:repeat> 
     <xp:button value="Add More" id="btnAddMore" 
      execMode="partial"> 
      <xp:eventHandler event="onclick" submit="true" 
       execMode="partial" execId="parentDiv" refreshMode="partial" refreshId="parentDiv"> 
       <xp:this.action><![CDATA[#{javascript:viewScope.rowCount = new java.lang.Integer(viewScope.rowCount + 5);}]]></xp:this.action> 
       <xp:this.script> 
        <xp:executeClientScript 
         script="dojo.window.scrollIntoView(dojo.byId('#{id:btnAddMore}').id);"> 
        </xp:executeClientScript> 
       </xp:this.script> 
      </xp:eventHandler> 
     </xp:button> 
    </xp:div> 
</xp:view> 

我在这里错过了什么?

我也注意到dojo.window.scrollIntoView clientside JS功能不起作用?任何帮助将非常感激。

回答

1

在你的代码中,我不能看到数据实际保存在文档中的位置。所以无论何时刷新rowdata,它都会遍历这些字段并从中检索数据。由于数据未保存,因此丢失了用户输入的数据。

添加一个保存简单的动作到partialrefresh,它应该工作。如果你喜欢,禁用验证,只有当用户点击某种类型的保存按钮时才进行验证。

+0

谢谢!我的印象是部分刷新不会失去现有的价值?所以我不得不在每次部分刷新期间强制保存,而不像你提到的那样进行验证。 – pipalia 2012-04-04 06:42:24

+0

我如何获得验证以在每一行上工作以验证它是否是有效产品以及运行其他验证?我无法真正计算输入控件的ID,那么如何使用错误消息控件工作? – pipalia 2012-04-05 10:44:55

1

如果持有数据的内容未被刷新,则部分刷新不会丢失数据。 prtial刷新和完整之间的唯一区别在于,部分仅发生在页面的某个区域,在本例中,刷新的“parentDiv”中包含所有控件,因此parentDiv将完全重新加载。

例如,如果你在哪里部分刷新inputText“KeyNo”,这个将失去它的数据,但输入文本“Qty”不会,因为“Qty”被第二次刷新触摸。