简介

与按资源类型绑定相比,按路径绑定servlet有几个缺点,即:

  • 无法使用默认JCR存储库ACL来控制路径绑定的servlet的访问
  • 路径绑定的servlet只能注册到路径,而不能注册到资源类型(即没有后缀处理)
  • 如果路径绑定的servlet不是活动的(例如,如果捆绑丢失或未启动),POST可能会导致意外结果。 通常在/bin/xyz处创建一个节点,该节点随后叠加了servlet路径绑定
    对于仅查看存储库的开发人员而言,该映射不透明
    鉴于这些缺点,强烈建议将servlet绑定到资源类型而不是路径

创建Servlet

在IntelliJ中启动您的aem-banking项目。 在servlet文件夹下创建一个名为GetFieldChoices的servlet,如下面的屏幕快照所示。
选项

示例Servlet

以下servlet绑定到Sling资源类型: azure/fetchchoices

import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
import org.apache.sling.servlets.annotations.SlingServletResourceTypes;
import org.osgi.framework.Constants;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.jcr.Session;
import javax.servlet.Servlet;
import java.io.IOException;
import java.io.Serializable;

@Component(
        service={Servlet.class }
)

        @SlingServletResourceTypes(
                resourceTypes="azure/fetchchoices",
                methods= "GET",
                extensions="json"
                )


public class GetFieldChoices extends SlingAllMethodsServlet implements Serializable {
    private static final long serialVersionUID = 1L;
    private final  transient Logger log = LoggerFactory.getLogger(this.getClass());




    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) {

        log.debug("The form path I got was "+request.getParameter("formPath"));

    }
}

在CRX中创建资源

  • 登录到本地AEM SDK。
  • 在内容节点下创建名为fetchchoices的资源(您可以根据需要命名该节点),类型为cq:Page
  • 保存更改
  • 创建名为jcr:content且类型为cq:PageContent的节点并保存更改
  • 将以下属性添加到jcr:content节点
属性名称
属性值
jcr:title
实用程序Servlet
sling:resourceType
azure/fetchchoices

sling:resourceType值必须与servlet中指定的resourceTypes="azure/fetchchchoices匹配。

您现在可以通过在资源的完整路径上请求sling:resourceType = azure/fetchchoices来调用您的servlet,并在Sling servlet中注册任何选择器或扩展。

http://localhost:4502/content/fetchchoices/jcr:content.json?formPath=/content/forms/af/forrahul/jcr:content/guideContainer

路径/content/fetchchoices/jcr:content是资源的路径,扩展.json是Servlet中指定的路径

同步您的AEM项目

  1. 在您喜爱的编辑器中打开AEM项目。 我用IntelliJ做这个。
  2. \aem-banking-application\ui.content\src\main\content\jcr_root\content下创建名为fetchchoices的文件夹
  3. 右键单击fetchchoices文件夹并选择repo | Get Command(此菜单项在本教程的上一章中设置)。

这应该会将此节点从AEM同步到您的本地AEM项目。

您的AEM项目结构应如下所示
resource-resolver
使用以下条目更新aem-banking-application\ui.content\src\main\content\META-INF\vault文件夹中的filter.xml

<filter root="/content/fetchchoices" mode="merge"/>

您现在可以使用Cloud Manager将更改推送到AEM as a Cloud Service环境。

后续步骤

启用Forms Portal组件

recommendation-more-help
4859a77c-7971-4ac9-8f5c-4260823c6f69