AEM as a Cloud Service: El envío del cuadro de diálogo omite la validación de campo obligatoria con script personalizado
En este artículo se explica cómo abordar un problema en Adobe Experience Manager as a Cloud Service en el que los cuadros de diálogo de componentes se pueden enviar aunque los campos obligatorios no estén rellenados, normalmente debido a que una secuencia de comandos personalizada del lado del cliente anula la validación estándar.
Descripción description
Entorno
Entornos Adobe Experience Manager as a Cloud Service (AEMaaCS) y AEM SDK.
Síntomas
- Un cuadro de diálogo de componente contiene un campo de texto con validación personalizada y un campo de ruta marcado como obligatorio.
- En entornos de AEM SDK, el cuadro de diálogo no se puede enviar si los campos obligatorios están vacíos o si falla la validación.
- En entornos de AEM as a Cloud Service, el cuadro de diálogo permite el envío, incluso cuando los campos obligatorios no están rellenados o la validación falla.
- El validador personalizado muestra su mensaje de error, pero al hacer clic en el botón Listo se sigue enviando el formulario.
Ejemplo de configuración de campo:
<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"/>
Causa
Un script de validación personalizado del lado del cliente registra un controlador de clic global para el botón Enviar diálogo. Este controlador intercepta todos los envíos de cuadros de diálogo y envía directamente el formulario, omitiendo la validación estándar de la interfaz de usuario de Granite. Como resultado, los cuadros de diálogo se envían incluso cuando los campos obligatorios están vacíos o cuando falla la validación personalizada.
Resolución resolution
Siga los pasos a continuación para resolver el problema:
- Revise los scripts de validación personalizados del lado del cliente, especialmente los que registran controladores de eventos para el envío de cuadros de diálogo (como los controladores del botón Enviar diálogo).
- Asegúrese de que cualquier controlador personalizado solo intercepta el envío para el cuadro de diálogo o campo deseado (por ejemplo: comprobando si hay un multicampo o contexto de diálogo específico antes de actuar).
- Refactorice el controlador para que solo se llame a
e.stopPropagation()y ae.preventDefault()después de confirmar que el controlador está tratando con el cuadro de diálogo deseado. Para todos los demás cuadros de diálogo, permita que el flujo de validación y envío estándar de AEM continúe sin interferencias. - Elimine cualquier lógica de reserva que envíe directamente el formulario para cuadros de diálogo que no sean los deseados.
- Vuelva a implementar la aplicación.
- Compruebe que el envío del cuadro de diálogo ahora esté correctamente bloqueado cuando los campos obligatorios no estén rellenados o la validación falle.