2012-04-03 3 views
0

Basierend auf dem Vorschlag von Tim Tripcony habe ich eine einfache xpage unten implementiert, die es mir erlaubt, Nr. Zu erweitern. von Feldern, die angezeigt werden, wenn ein Benutzer auf die Schaltfläche "Mehr hinzufügen" klickt. Ich habe ein Problem mit der partiellen Aktualisierung, die sich nicht an die Daten erinnert, wenn die Schaltfläche Mehr hinzufügen eine partielle Aktualisierung durchführt und die Nummer erweitert. von Reihen.XPages mehr Felder beim Klicken auf eine Schaltfläche Problem mit teilweiser Aktualisierung

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

Was fehlt mir hier?

Ich habe auch bemerkt, dass die dojo.window.scrollIntoView clientside JS-Funktion nicht funktioniert? Jede Hilfe würde sehr geschätzt werden.

Antwort

1

In Ihrem Code kann ich nicht sehen, wo die Daten tatsächlich auf dem Dokument gespeichert sind. Wenn also die rowdata aktualisiert wird, iteriert sie über die Felder und ruft die Daten ab. Da Daten nicht gespeichert werden, haben Sie die vom Benutzer eingegebenen Daten verloren.

Fügen Sie eine einfache Aktion zum Teilrefresh hinzu und es sollte funktionieren. Deaktivieren Sie die Validierung, wenn Sie möchten, dass die Validierung nur durchgeführt wird, wenn der Benutzer auf die Schaltfläche "Speichern" klickt.

+0

Danke! Ich hatte den Eindruck, dass eine partielle Aktualisierung die vorhandenen Werte nicht verliert? Daher müsste ich bei jeder Teilaktualisierung eine Sicherung erzwingen, ohne dass die Validierung wie erwähnt durchgeführt wird. – pipalia

+0

Wie würde ich eine Validierung erhalten, um an jeder Zeile zu arbeiten, um zu prüfen, ob es ein gültiges Produkt ist, und um andere Validierungen durchzuführen? Ich kann die ID für ein Eingabesteuerelement nicht wirklich berechnen. Wie funktioniert das mit der Fehlermeldesteuerung? – pipalia

1

Eine partielle Aktualisierung verliert keine Daten, wenn die Daten nicht aktualisiert werden. Der einzige Unterschied zwischen einer Prtial-Aktualisierung und einer vollständigen ist, dass nur ein Teil der Seite partiell ist, in diesem Beispiel das erfrischende "parentDiv", das alle Steuerelemente enthält, so dass parentDiv komplett neu geladen wird.

Wenn Sie zum Beispiel den Eingangstext "KeyNo" teilweise aktualisieren, verliert dieser seine Daten, aber der Eingangstext "Qty" würde nicht, weil "Qty" von th refresh berührt wird.

Verwandte Themen