首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CQ5 Java QueryBuilder API

CQ5 Java QueryBuilder API
EN

Stack Overflow用户
提问于 2014-01-10 09:19:27
回答 2查看 5.4K关注 0票数 0

我在adobe文档中看到了QueryBuilder服务,它可以由URL为许多查询选项调用,这将返回基于JSON的响应。很好。我打算在java中使用这一点。我已经找到了一些例子,并在eclipse中尝试过,但有些东西我不知道如何获得服务“吊带”,如下面给定的代码所示:或者换句话说,如何生成一个QueryBuilder对象。

我需要的任何特定的JAR,或者我需要在我的PC上安装Apache,我不确定有谁能分享这一点,因为我是CQ5新手,不知道。

示例代码如下:

代码语言:javascript
复制
        Repository repository = JcrUtils.getRepository(SERVER);
        SimpleCredentials credentials = new SimpleCredentials(USERNAME, PASSWORD.toCharArray());
        Session session = repository.login(credentials);
        System.out.println("got session: " + session);

        /*HERE SLING IS THE PROBLEM HOW TO GET SLING */  
        QueryBuilder qbuilder = sling.getService(QueryBuilder.class);
        String fulltextSearchTerm = "Geometrixx";

        // create query description as hash map (simplest way, same as form
        // post)
        Map<String, String> map = new HashMap<String, String>();

        // create query description as hash map (simplest way, same as form
        // post)
        map.put("path", "/content");
        map.put("type", "cq:Page");
        map.put("group.p.or", "true"); // combine this group with OR
        map.put("group.1_fulltext", fulltextSearchTerm);
        map.put("group.1_fulltext.relPath", "jcr:content");
        map.put("group.2_fulltext", fulltextSearchTerm);
        map.put("group.2_fulltext.relPath", "jcr:content/@cq:tags");

        // can be done in map or with Query methods
        map.put("p.offset", "0"); // same as query.setStart(0) below
        map.put("p.limit", "20"); // same as query.setHitsPerPage(20) below

        Query query = qbuilder.createQuery(PredicateGroup.create(map), session);
        query.setStart(0);
        query.setHitsPerPage(20);

        SearchResult result = query.getResult();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-10 10:52:21

如果您使用的是Java类而不是JSP,则可以使用@Reference注释对给定服务进行查找--这将找到由OSGi注册的匹配服务,并将其实现返回给您。

来自Felix SCR文件

@Reference注释定义了对服务组件运行时提供给组件的其他服务的引用。

然后,您的代码变得简单:

代码语言:javascript
复制
@Reference
QueryBuilder qbuilder;
票数 1
EN

Stack Overflow用户

发布于 2014-02-18 04:07:28

这可以使用adobe magic...Add来实现,这是类中的一个私有字段,用于保存ComponentContext。

代码语言:javascript
复制
private ComponentContext context;

实现激活方法:

代码语言:javascript
复制
protected void activate(ComponentContext context) {
    this.context = context;
}

然后,您可以使用这个上下文获取queryBuilder:

代码语言:javascript
复制
ServiceReference queryBuilderReference = context.getBundleContext().getServiceReference(QueryBuilder.class.getName());
QueryBuilder queryBuilder = (QueryBuilder) context.getBundleContext().getService(queryBuilderReference);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21040299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档