AEM as a Cloud Service: Bei der Dialogfeldübermittlung wird die erforderliche Feldüberprüfung mit benutzerdefiniertem Skript umgangen

In diesem Artikel wird erläutert, wie in Adobe Experience Manager as a Cloud Service ein Problem behoben werden kann, bei dem Komponentendialogfelder gesendet werden können, selbst wenn die erforderlichen Felder nicht ausgefüllt sind, normalerweise aufgrund eines benutzerdefinierten clientseitigen Skripts, das die Standardvalidierung überschreibt.

Beschreibung description

Umgebung

Umgebungen mit Adobe Experience Manager as a Cloud Service (AEMaaCS) und AEM SDK.

Symptome

  • Ein Komponentendialogfeld enthält ein Textfeld mit benutzerdefinierter Validierung und ein als markiertes Pfadfeld.
  • In AEM SDK-Umgebungen kann das Dialogfeld nicht gesendet werden, wenn die erforderlichen Felder leer sind oder die Validierung fehlschlägt.
  • In AEM as a Cloud Service-Umgebungen ermöglicht das Dialogfeld die Übermittlung, auch wenn die erforderlichen Felder nicht ausgefüllt sind oder die Validierung fehlschlägt.
  • Der benutzerdefinierte Validator zeigt die Fehlermeldung an, aber wenn Sie auf die Schaltfläche Fertig klicken, wird das Formular trotzdem gesendet.

Beispielfeldkonfiguration:

<alt
    jcr:primaryType="nt:unstructured"
    sling:resourceType="granite/ui/components/coral/foundation/form/textfield"
    validation="testing.test"
    fieldDescription="Alternative text for image"
    fieldLabel="Alt text"
    name="./alt"/>
<linkURL
    jcr:primaryType="nt:unstructured"
    sling:resourceType="granite/ui/components/coral/foundation/form/pathfield"
    required="{Boolean}true"
    fieldDescription="Link"
    fieldLabel="Link"
    name="./linkURL"/>

Ursache

Ein benutzerdefiniertes Client-seitiges Validierungsskript registriert einen globalen Klick-Handler für die Schaltfläche Dialogfeld senden. Dieser Handler fängt alle Dialogfeldübermittlungen ab und sendet das Formular direkt unter Umgehung der standardmäßigen Validierung der Granite-Benutzeroberfläche. Daher werden Dialogfelder gesendet, auch wenn die erforderlichen Felder leer sind oder die benutzerdefinierte Validierung fehlschlägt.

Lösung resolution

Gehen Sie wie folgt vor, um das Problem zu beheben:

  1. Überprüfen Sie Ihre benutzerdefinierten Client-seitigen Validierungsskripte, insbesondere diejenigen, die Ereignis-Handler für die Dialogfeldübermittlung registrieren (z. B. Handler für die Schaltfläche Dialog ).
  2. Stellen Sie sicher, dass ein benutzerdefinierter Handler nur die Übermittlung für das vorgesehene Dialogfeld oder Feld abfängt (z. B. durch Überprüfung auf ein bestimmtes Mehrfachfeld oder einen bestimmten Dialogfeldkontext vor dem Handeln).
  3. Refaktorieren Sie den Handler so, dass e.stopPropagation() und e.preventDefault() nur aufgerufen werden, nachdem bestätigt wurde, dass der Handler mit dem beabsichtigten Dialogfeld umgeht. Lassen Sie für alle anderen Dialogfelder zu, dass der standardmäßige Validierungs- und Übermittlungsfluss von AEM störungsfrei fortgesetzt wird.
  4. Entfernen Sie alle Fallback-Logiken, die das Formular direkt für andere Dialogfelder als die beabsichtigte übermitteln.
  5. Stellen Sie Ihr Programm erneut bereit.
  6. Stellen Sie sicher, dass die Dialogfeldübermittlung jetzt korrekt blockiert wird, wenn erforderliche Felder nicht ausgefüllt werden oder die Validierung fehlschlägt.
recommendation-more-help
experience-cloud-kcs-help-kbarticles