我正在使用服务器端Javascript
( NOT Java )中的AEM JCR_SQL2 API寻找一些示例代码,即以use(function() { ... })
开头并已加载的代码通过data-sly-use=${...}
。
所有Google搜索结果都是100%基于Java的示例。
我已经尝试过的方法:Google“ JCR-SQL2 js示例”及其变体。
预期结果:JavaScript中的示例代码。
实际结果:许多Java代码:-(
答案 0 :(得分:4)
如果要使用服务器端JS(我不建议这样做),则只需转换Java示例的语法。无论如何,您都与Java对象进行交互。因此,JS的API与Java的API相同。如果您有HTL组件并通过Use-API调用JS,则JS范围中已经定义了几个对象。
https://helpx.adobe.com/experience-manager/htl/using/global-objects.html
这是一个JS示例,可通过SQL-2查询搜索所有核心组件:
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>
PS:您可能知道,但是在这里找到了JS的Use-API: https://helpx.adobe.com/experience-manager/htl/using/use-api-javascript.html
答案 1 :(得分:0)
我不知道用于JCR_SQL2查询的任何Web-API。您将必须在AEM(使用Java)中实现自己的Servlet,该Servlet可以接受来自外部HTTP请求的查询。然后,您可以通过Ajax从JS代码中调用servlet,并使用Java在AEM中执行查询。
也许 Query Builder API 对您来说很有趣。该查询语言已经可以从外部获得,可以通过Ajax调用。为了测试和开发查询,您可以使用查询调试器:
Adobe文档:
https://helpx.adobe.com/experience-manager/6-3/sites/developing/using/querybuilder-api.html
查询调试器:
http://localhost:4502/libs/cq/search/content/querydebug.html
带有示例查询的查询调试器:
直接调用示例查询: