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:

  1. 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 ).
  2. 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).
  3. Refatore o manipulador para que e.stopPropagation() e e.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.
  4. Remova qualquer lógica de fallback que envie diretamente o formulário para caixas de diálogo diferentes da desejada.
  5. Reimplante seu aplicativo.
  6. 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.
recommendation-more-help
experience-cloud-kcs-help-kbarticles