AEM as a Cloud Service: o envio da caixa de diálogo ignora a validação de campo necessária com script personalizado
Este artigo explica como resolver um problema no Adobe Experience Manager as a Cloud Service em que as caixas de diálogo do componente podem ser enviadas mesmo se os campos obrigatórios não estiverem preenchidos, normalmente devido a um script personalizado do lado do cliente que substitui a validação padrão.
Descrição description
Ambiente
Ambientes Adobe Experience Manager as a Cloud Service (AEMaaCS) e AEM SDK.
Sintomas
- Uma caixa de diálogo de componente contém um campo de texto com validação personalizada e um campo de caminho marcado como obrigatório.
- Em ambientes AEM SDK, a caixa de diálogo não pode ser enviada se os campos obrigatórios estiverem vazios ou a validação falhar.
- Em ambientes AEM as a Cloud Service, a caixa de diálogo permite o envio, mesmo quando os campos obrigatórios não são preenchidos ou a validação falha.
- O validador personalizado exibe sua mensagem de erro, mas ao clicar no botão Concluído, o formulário ainda será enviado.
Exemplo de configuração 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
Um script de validação personalizado do lado do cliente registra um manipulador de cliques global para o botão Enviar diálogo. Esse manipulador intercepta todos os envios de caixas de diálogo e envia o formulário diretamente, ignorando a validação padrão da interface do usuário do Granite. Como resultado, as caixas de diálogo são enviadas mesmo quando os campos obrigatórios estão vazios ou a validação personalizada falha.
Resolução resolution
Siga as etapas abaixo para resolver o problema:
- Revise seus scripts de validação personalizados do lado do cliente, especialmente aqueles que estão registrando manipuladores de eventos para envio de caixa de diálogo (como manipuladores para o botão Enviar Caixa de Diálogo ).
- Certifique-se de que qualquer manipulador personalizado intercepte apenas o envio da caixa de diálogo ou do campo desejado (por exemplo: verificando um multicampo ou contexto de caixa de diálogo específico antes de agir).
- Refatore o manipulador para que
e.stopPropagation()ee.preventDefault()só sejam chamados depois de confirmar que o manipulador está lidando com a caixa de diálogo desejada. Para todas as outras caixas de diálogo, permita que a validação padrão e o fluxo de envio da AEM continuem sem interferência. - Remova qualquer lógica de fallback que envie diretamente o formulário para caixas de diálogo diferentes da desejada.
- Reimplante seu aplicativo.
- Verifique se o envio da caixa de diálogo agora está bloqueado corretamente quando os campos obrigatórios não estão preenchidos ou a validação falha.