AEM as a Cloud Service:对话框提交绕过了使用自定义脚本进行必填字段验证

本文介绍如何解决Adobe Experience Manager as a Cloud Service中的问题:即使必填字段未填写(通常是由于自定义客户端脚本覆盖标准验证所致),也可能会提交组件对话框。

描述 description

环境

Adobe Experience Manager as a Cloud Service (AEMaaCS)和AEM SDK环境。

症状

  • 组件对话框包含具有自定义验证的文本字段和标记为​ 必填 ​的路径字段。
  • 在AEM SDK环境中,如果必填字段为空或验证失败,则无法提交对话框。
  • 在AEM as a Cloud Service环境中,即使必填字段未填写或验证失败,对话框也允许提交。
  • 自定义验证器显示其错误消息,但单击 完成 按钮仍会提交表单。

示例字段配置:

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

原因

自定义客户端验证脚本为 Dialog Submit 按钮注册全局点击处理程序。 此处理程序绕过标准Granite UI验证,截获所有对话框提交并直接提交表单。 因此,即使必填字段为空或自定义验证失败,也会提交对话框。

解决方法 resolution

请按照以下步骤解决问题:

  1. 查看您的自定义客户端验证脚本,特别是那些注册用于提交对话框的事件处理程序(例如 对话框提交 按钮的处理程序)的脚本。
  2. 确保任何自定义处理程序仅截获目标对话框或字段的提交(例如,通过在操作之前检查特定的多字段或对话框上下文)。
  3. 重构处理程序,以便仅在确认处理程序正在处理预期对话框后调用e.stopPropagation()e.preventDefault()。 对于所有其他对话框,请允许AEM的标准验证和提交流程在不受干扰的情况下继续进行。
  4. 删除任何直接提交表单以供对话框使用的回退逻辑,而不是所需的逻辑。
  5. 重新部署您的应用程序。
  6. 验证在必填字段未填写或验证失败时,现在是否正确阻止了对话框提交。
recommendation-more-help
experience-cloud-kcs-help-kbarticles