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:
- Ü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 ).
- 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).
- Refaktorieren Sie den Handler so, dass
e.stopPropagation()unde.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. - Entfernen Sie alle Fallback-Logiken, die das Formular direkt für andere Dialogfelder als die beabsichtigte übermitteln.
- Stellen Sie Ihr Programm erneut bereit.
- Stellen Sie sicher, dass die Dialogfeldübermittlung jetzt korrekt blockiert wird, wenn erforderliche Felder nicht ausgefüllt werden oder die Validierung fehlschlägt.