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