Aem Javascript中的JCR_SQL2示例?

Aem Javascript中的JCR_SQL2示例?,aem,jcr,Aem,Jcr,我正在服务器端Javascript(非Java)中寻找一些使用AEM JCR_SQL2 API的示例代码,即以use(function(){…})开头并通过data sly use=${…}加载的代码 所有谷歌搜索结果都是100%基于Java的示例 我已经尝试过的:Google“JCR-SQL2 js示例”和变体 预期结果:Javascript中的示例代码 实际结果:大量Java代码:-(我不知道JCR_SQL2查询有任何Web API。您必须在AEM(使用Java)中实现自己的Servlet,

我正在服务器端
Javascript
非Java)中寻找一些使用AEM JCR_SQL2 API的示例代码,即以
use(function(){…})
开头并通过
data sly use=${…}
加载的代码

所有谷歌搜索结果都是100%基于Java的示例

我已经尝试过的:Google“JCR-SQL2 js示例”和变体

预期结果:Javascript中的示例代码


实际结果:大量Java代码:-(

我不知道JCR_SQL2查询有任何Web API。您必须在AEM(使用Java)中实现自己的Servlet,它将接受来自外部HTTP请求的查询。然后您可以通过Ajax从JS代码调用Servlet,并在AEM内部使用Java执行查询

您可能对查询生成器API感兴趣。此查询语言已从外部提供,可以通过Ajax调用。要测试和开发查询,可以使用查询调试器:

Adobe文档:

查询调试器:

带有示例查询的查询调试程序:

直接调用的示例查询:


如果你想使用服务器端JS(我不推荐),那么你只需要转换Java示例的语法。你无论如何都要与Java对象交互。因此JS的API与Java的API相同。如果你有一个HTL组件并通过use API调用JS,那么你的JS范围中已经定义了几个对象

下面是一个使用SQL-2查询搜索所有核心组件的JS示例:

use(function () {
    var pageName = currentPage.name;
    var title = currentPage.properties.get("jcr:title");
    var resourceName = granite.resource.name;
    var resourceTitle = properties.get("jcr:title");

    var componentList = [];
    var componentIter = resolver.findResources("SELECT * FROM [cq:Component] AS c WHERE ISDESCENDANTNODE(c, '/apps/core/wcm')", "JCR-SQL2");
    while (componentIter.hasNext()) {
        var compoenentRes = componentIter.next();
        componentList.push(compoenentRes.getPath());
    }

    return {
        pageName: pageName,
        title: title,
        resourceName: resourceName,
        componentList: componentList
    };
});
使用它的组件HTL代码是:

<div data-sly-use.info="info.js">
    <p>page name: ${info.pageName}</p>
    <p>title: ${info.title}</p>
    <p>resourceName: ${info.resourceName}</p>
    <p>core components: </p>
    <ul data-sly-list.component="${info.componentList}">
        <li>${component}
    </ul>
</div>

页面名称:${info.pageName}

标题:${info.title}

resourceName:${info.resourceName}

核心组成部分:

  • ${component}
PS:您可能知道,但在这里您可以找到JS的使用API:

我希望在服务器端js中实现这一点,即
使用(function(){…})
,不是Web API。请注意,我要问,为什么使用JS?如果您将其用于使用模型,为什么不使用Java?另外,发布一个简单的Java示例,我可能能够将其转换为JS。@AhmedMusallam JS的优点有很好的文档记录,例如这里我不知道“优点”在这种特定情况下。不应使用use API模型进行查询或具有复杂的逻辑。您最好创建一个OSGI服务,该服务在您的JS模型中进行查询并调用该服务。@AhmedMusallam您是否建议使用OSGI服务来简单检索要在JS模型的表示逻辑中使用的字符串值单个、不可重用的AEM组件?当然不是,我的评论是一般性的,就像你的问题是一般性的:)此外,我的评论中包括了“复杂”一词,以防你漏掉它。如果您是针对“单一的、不可重用的AEM组件”(新信息)执行此操作,那么请确定,在JS中添加该逻辑,毕竟这是您的实现。