Introducción

Última actualización: 2024-01-25
  • Creado para:
  • Beginner
    Intermediate
    Developer

Los servlets de enlace por rutas tienen varias desventajas en comparación con los enlaces por tipos de recursos, concretamente:

  • Los servlets enlazados a rutas no pueden controlar el acceso mediante las ACL de repositorio JCR predeterminadas
  • Los servlets enlazados a rutas solo se pueden registrar en una ruta y no en un tipo de recurso (es decir, sin control de sufijos)
  • Si un servlet enlazado a una ruta no está activo, por ejemplo, si el paquete falta o no se inicia, un POST puede dar como resultado resultados inesperados. normalmente, se crea un nodo en /bin/xyz que posteriormente superpone la ruta de los servlets enlazar la asignación no es transparente para un desarrollador que solo mire el repositorio. Dados estos inconvenientes, se recomienda encarecidamente enlazar los servlets a tipos de recursos en lugar de rutas

Crear servlet

Inicie el proyecto de banca aem en IntelliJ. Cree un servlet denominado GetFieldChoices en la carpeta de servlets como se muestra en la captura de pantalla siguiente.
opciones

Servlet de ejemplo

El siguiente servlet está enlazado al tipo de recurso de 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"));

    }
}

Crear recursos en CRX

  • AEM Inicie sesión en el SDK local de la.
  • Cree un recurso con el nombre fetchchoices (puede asignar un nombre a este nodo de todos modos que desee) de tipo cq:Page en el nodo de contenido.
  • Guarde los cambios
  • Cree un nodo llamado jcr:content de tipo cq:PageContent y guarde los cambios
  • Añada las siguientes propiedades a jcr:content nodo
Nombre de la propiedad Valor de propiedad
jcr:title Servlets de utilidad
sling:resourceType azure/fetchchoices

El sling:resourceType el valor debe coincidir con resourceTypes="azure/fetchchoices especificado en el servlet.

Ahora puede invocar el servlet solicitando el recurso con sling:resourceType = azure/fetchchoices en su ruta completa, con cualquier selector o extensión registrado en el servlet Sling.

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

La ruta /content/fetchchoices/jcr:content es la ruta del recurso y la extensión .json es lo que se especifica en el servlet

AEM Sincronizar el proyecto de

  1. AEM Abra el proyecto de en su editor favorito. He usado intelliJ para esto.
  2. Cree una carpeta llamada fetchchoices bajo \aem-banking-application\ui.content\src\main\content\jcr_root\content
  3. Clic derecho fetchchoices carpeta y seleccione repo | Get Command (Este elemento de menú se configura en un capítulo anterior de este tutorial).

AEM AEM Esto debe sincronizar este nodo desde el al proyecto local de la.

AEM La estructura del proyecto de la aplicación debería tener este aspecto
resource-resolver
Actualice el archivo filter.xml en la carpeta aem-banking-application\ui.content\src\main\content\META-INF\vault con la siguiente entrada

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

AEM Ahora puede insertar los cambios en un entorno as a Cloud Service mediante Cloud Manager.

Pasos siguientes

Habilitar componentes del portal de Forms

En esta página