AEM as a Cloud Service : l’envoi de la boîte de dialogue contourne la validation du champ obligatoire avec le script personnalisé

Cet article explique comment résoudre un problème dans Adobe Experience Manager as a Cloud Service où les boîtes de dialogue de composant peuvent être envoyées même si les champs obligatoires ne sont pas remplis, généralement en raison d’un script client personnalisé qui remplace la validation standard.

Description description

Environnement

Environnements Adobe Experience Manager as a Cloud Service (AEMaaCS) et AEM SDK.

Symptômes

  • Une boîte de dialogue de composant contient un champ de texte avec validation personnalisée et un champ de chemin marqué comme obligatoire.
  • Dans les environnements AEM SDK, la boîte de dialogue ne peut pas être envoyée si les champs obligatoires sont vides ou si la validation échoue.
  • Dans les environnements AEM as a Cloud Service, la boîte de dialogue permet l’envoi, même si les champs obligatoires ne sont pas remplis ou si la validation échoue.
  • Le programme de validation personnalisé affiche son message d’erreur, mais cliquer sur le bouton Terminé entraîne toujours l’envoi du formulaire.

Exemple de configuration de champ :

<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"/>

Cause

Un script de validation côté client personnalisé enregistre un gestionnaire de clics global pour le bouton Envoyer de la boîte de dialogue. Ce gestionnaire intercepte tous les envois de boîte de dialogue et envoie directement le formulaire, en contournant la validation standard de l’interface utilisateur Granite. Par conséquent, les boîtes de dialogue sont envoyées même lorsque les champs obligatoires sont vides ou que la validation personnalisée échoue.

Résolution resolution

Suivez les étapes ci-dessous pour résoudre le problème :

  1. Examinez vos scripts de validation côté client personnalisés, en particulier ceux qui enregistrent des gestionnaires d’événements pour l’envoi de la boîte de dialogue (tels que les gestionnaires du bouton Envoyer de la boîte de dialogue).
  2. Assurez-vous que les gestionnaires personnalisés interceptent uniquement l’envoi pour la boîte de dialogue ou le champ prévu (par exemple : en recherchant un contexte de boîte de dialogue ou multichamp spécifique avant d’agir).
  3. Refactorisez le gestionnaire de sorte que e.stopPropagation() et e.preventDefault() ne soient appelés qu’après avoir confirmé que le gestionnaire traite la boîte de dialogue prévue. Pour toutes les autres boîtes de dialogue, autorisez le flux de validation et d’envoi standard d’AEM à se poursuivre sans interférence.
  4. Supprimez toute logique de secours qui envoie directement le formulaire pour des boîtes de dialogue autres que celle prévue.
  5. Redéployez votre application.
  6. Vérifiez que l’envoi de la boîte de dialogue est désormais correctement bloqué lorsque les champs obligatoires ne sont pas remplis ou que la validation échoue.
recommendation-more-help
experience-cloud-kcs-help-kbarticles