2016-03-31 9 views
0

Ich öffne die xform-Seite und sende das Formular direkt, ohne die Formularfelder zu besuchen. Wenn das Formular Validierungsfehler aufweist, werden keine Daten gesendet, aber es werden keine Validierungsfehler im Standard Error Summary Component angezeigt. Ich zeige einen modalen Dialog, wenn das Ereignis "xforms-submit-error" auftritt. Die Validierungsfehler werden durch die Fehlerübersichts-Komponente gesteuert: Aus ihrer Dokumentation sehen wir, dass "... Fehlerzusammenfassung Komponente ... die besuchten Steuerelemente verfolgt und Fehler nur für die besuchten zeigt, während alle im Auge behalten werden Fehler ... " Und das passiert! :-)Validierungsfehler anzeigen, wenn die Übermittlung in Orbeon-Formularen fehlschlägt

Also ich möchte, wenn der Benutzer versucht, das Formular, OHNE "Besuch" jedes Formularfeld, wenn es einen Validierungsfehler, um die Validierungsfehler aufzulisten.

Ich fand in verschiedenen Orbeon bezogenen Seiten/Code Samples/Foren, die dazu führen, dass "Visit-All" Aktion, die dazu führen, dass alle Kontrollen "besucht" markieren, so dass ihre zugehörigen Fehler zeigt !

versuchte So etwas wie dieses, aber kein Glück !:

... 

    <xf:submission id="submit" ... 
     ... 
     <xf:action ev:event="xforms-submit-error"> 
      <xf:message level="modal">Oooops!</xf:message> 
      <!-- virtual visit all form fields? --> 
      <xf:dispatch name="fr-visit-all" targetid="error-summary"/> 
      <xf:refresh/> 
      <xf:dispatch name="fr-update" targetid="error-summary"/> 
     </xf:action> 
     ... 
    </xf:submission > 

    ... 
    </xf:model> 
</xh:head> 
<xh:body> 
    <fr:view> 
    ... 

    <xf:trigger id="submit-control" bind="submit-bind"> 
     <xf:label ref="$form-resources/submit/label" /> 
     <xf:send ev:event="DOMActivate" submission="submit" /> 
    </xf:trigger> 

    ... 

Wie default "Fehlerübersicht" zugreifen? Ich habe keine benutzerdefinierte Fehlerzusammenfassung hinzugefügt, ich möchte die integrierte Komponente verwenden.

Orbeon mit Forms 4,5

+1

Ich checkte und Formular Runner tut Versand 'fr-Besuch-all'. Dies führt dazu, dass die Fehlerzusammenfassung auch die Aktion "" verwendet, um alle Steuerelemente als besucht zu markieren. Ich bin mir also nicht sicher, warum das in Ihrem Fall nicht funktioniert. Können Sie "fr-visit-all" * vor dem Einreichen versuchen? – ebruchez

+0

targetid sollte "error-summary", "fr-error-summary-model", etwas anderes sein? – oikonomopo

Antwort

0

gelöst!

Das Problem war die Ziel-Eigenschaft des XF: Dispatch-Ereignishandlers.

Anstelle von "Fehlerzusammenfassung" sollten wir "fr-error-summary-model" als targetid-Eigenschaftswert verwenden, um auf die integrierte "Error Summary Component" zuzugreifen.

(inspizieren components.xsl, error-summary.xbl)

Beispielarbeitscode:

... 
    <xf:submission id="submit" ... 
     ... 
     <xf:action ev:event="xforms-submit-error"> 
      <!-- Listing the errors present on form --> 
      <!-- 
       1. visit-all action, which will result in marking all controls "visited", so their related error shows. 
       2. to properly update the error summary within a submission response, we need an explicit <xf:refresh> action before dispatching.... 
       3. ...fr-update, so that the UI captures all the valid/invalid states: 
      --> 
      <xf:dispatch name="fr-visit-all" targetid="fr-error-summary-model"/> 
      <xf:refresh/> 
      <xf:dispatch name="fr-update" targetid="fr-error-summary-model"/> 
     </xf:action> 
     <xf:action ev:event="xforms-submit-done"> 
      <xxf:script>window.parent.closeIframe();</xxf:script> 
     </xf:action> 
    </xf:submission> 
    ... 
    </xf:model> 
</xh:head> 
<xh:body> 
    <fr:view> 
    ... 
    <xf:trigger id="submit-control" bind="submit-bind"> 
     <xf:label ref="$form-resources/submit/label" /> 
     <xf:send ev:event="DOMActivate" submission="submit" /> 
    </xf:trigger> 
    ... 
Verwandte Themen