Aem 在mywebsite组件中重用CQ5表单不会显示表单部分的末尾

Aem 在mywebsite组件中重用CQ5表单不会显示表单部分的末尾,aem,Aem,我正在尝试将表单重用到我的项目组件中。 我已将整个表单文件夹从“/libs/foundation/components/form”复制粘贴到我的项目“/apps/mywebsite/components/form”。 但当我试图使用parsys网站上的表单时,from只显示from的开始。 当我试图在同一页PARSISS中从基础中使用表单时,它显示了表单的开始和结束。 观察: 从内容来看,当我在页面内容中使用基础窗体时,我可以看到起始节点和结束节点。其中,当我单独使用mywebsite表单开始节

我正在尝试将表单重用到我的项目组件中。 我已将整个表单文件夹从“/libs/foundation/components/form”复制粘贴到我的项目“/apps/mywebsite/components/form”。 但当我试图使用parsys网站上的表单时,from只显示from的开始。 当我试图在同一页PARSISS中从基础中使用表单时,它显示了表单的开始和结束。 观察:
从内容来看,当我在页面内容中使用基础窗体时,我可以看到起始节点和结束节点。其中,当我单独使用mywebsite表单开始节点时,创建表单结束。

表单结束由FormParagraphPostProcessor类的fixStructure()方法添加/删除。此后处理器侦听表单开始和表单结束段落的创建和删除,并相应地创建/删除其他段落

if ( ResourceUtil.isA(res, FormsConstants.RT_FORM_BEGIN)
    || ResourceUtil.isA(res, FormsConstants.RT_FORM_END)) {
    if ( FormsHelper.checkFormStructure(res) != null ) {
        logger.debug("Fixed forms structure at {}", contentResource.getPath());
    }
}else {
    fixStructure(res);
}
该类依赖于FormConstants.java,其中表单开始(RT_form_BEGIN)和表单结束(RT_form_end)分别定义为“基础/组件/表单/开始”和“基础/组件/表单/结束”。因此,后处理器不会处理项目中存在的表单开始/结束

< >为了使自定义表单组件工作,您可以考虑下列选项之一:

  • 将项目表单开始的sling:resourceSuperType属性添加为“基础/组件/表单/开始”。这将创建一个表单结束,但它的类型是foundation/components/form/end,而不是您的项目表单结束

  • 如果您不希望使用默认表单结束,而希望使用自定义表单结束,那么您可能需要创建一个自定义后处理器,它侦听表单的开始和结束,并相应地修复结构。这需要修改一些其他java类,如FormsHelper.java等,因为它们也依赖于FormConstants.java。还要确保start.jsp中的导入也相应地更改

  • if ( ResourceUtil.isA(res, FormsConstants.RT_FORM_BEGIN)
        || ResourceUtil.isA(res, FormsConstants.RT_FORM_END)) {
        if ( FormsHelper.checkFormStructure(res) != null ) {
            logger.debug("Fixed forms structure at {}", contentResource.getPath());
        }
    }else {
        fixStructure(res);
    }
    
  • 最后,如果不想创建自定义类,可以将默认表单开始复制到“/apps/foundation/components/form/start”并在其上进行修改。但是,在使用这种方法时,需要小心,因为这是一个全局变化,并且会影响使用默认基础形式启动的其他项目。