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中添加该逻辑,毕竟这是您的实现。