JCR_SQL2 Javascript 中的示例?
JCR_SQL2 example in Javascript?
我正在寻找一些使用服务器端 Javascript
中的 AEM JCR_SQL2 API 的示例代码(不是 Java),即以 use(function() { ... })
开头并通过 data-sly-use=${...}
.
加载的代码
所有 Google 结果都是 100% Java 基于示例。
我已经尝试过的:Google "JCR-SQL2 js example" 和变体。
预期结果:Java脚本中的示例代码。
实际结果:大量 Java 代码 :-(
我不知道 JCR_SQL2 查询有任何 Web-API。您必须在 AEM(使用 Java)中实施您自己的 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
带有示例查询的查询调试器:
直接调用的示例查询:
如果你想使用服务器端JS(我不推荐),那么你只需要转换Java示例的语法即可。无论如何,你都会与 Java-Objects 互动。所以 API 对于 JS 和 Java 是一样的。如果你有一个 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
我正在寻找一些使用服务器端 Javascript
中的 AEM JCR_SQL2 API 的示例代码(不是 Java),即以 use(function() { ... })
开头并通过 data-sly-use=${...}
.
所有 Google 结果都是 100% Java 基于示例。
我已经尝试过的:Google "JCR-SQL2 js example" 和变体。
预期结果:Java脚本中的示例代码。
实际结果:大量 Java 代码 :-(
我不知道 JCR_SQL2 查询有任何 Web-API。您必须在 AEM(使用 Java)中实施您自己的 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
带有示例查询的查询调试器:
直接调用的示例查询:
如果你想使用服务器端JS(我不推荐),那么你只需要转换Java示例的语法即可。无论如何,你都会与 Java-Objects 互动。所以 API 对于 JS 和 Java 是一样的。如果你有一个 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