在ajax调用上调用sling服务

时间:2015-01-07 18:44:44

标签: ajax service cq5 sling

我在本地编写了一个电子邮件交换服务,并将其作为捆绑包部署到AEM6中。所以我的服务现在可用作吊索服务。

我已经在jsp中使用了它,如下所示。

EmailService es - sling.getService(EmailService.class);

但是现在在Aem6中,我需要在点击按钮时轻松调用该服务,这将使用ajax调用完成。

请告诉我如何在ajax电话上使用吊索服务。

谢谢, ESHA

2 个答案:

答案 0 :(得分:2)

您可能无法通过AJAX直接致电您的服务,因为您的服务并不能满足您的要求。

您可以编写一个SlingServlet解析为可以引用您的EmailExchange服务的路径/ resourceType,或者访问其脚本通过sling.getService()

使用您的EmailExchange服务的任何内容节点
@SlingServlet(paths="/bin/emailexchange.servlet", methods="POST")
public Class EmailExchangeServlet extends SlingAllMethodsServlet {

    @Reference
    private EmailService emailService;

    protected void doPost(SlingHttpServletRequest req, SlingHttpServletResponse res) {
        // do your stuff 
    }
}

答案 1 :(得分:0)

保持关注点分离:

  • 服务在应用程序服务器内部提供数据/实现(在AEM / CQ5之外的构建时也恰好可以测试)。这些应该提供业务逻辑/规则,但通常避免渲染实现。
  • Servlets 响应HTTP请求,理想情况下包装对服务的调用,以保持代码清洁。 servlet可以确定响应是否需要是JSON,HTML,XML或其他
  • 组件 JSP(和Sightly)通常应该充当响应的模板。他们还可以直接调用服务来执行业务逻辑。
  • AJAX 是一个HTTP请求,可以与servlet或组件的路径进行交互,以获取(通常)JSON或HTML响应。

有鉴于此,您的AJAX应该POST到Servlet,它可以调用服务。