我在adobe文档中看到了QueryBuilder服务,它可以由URL为许多查询选项调用,这将返回基于JSON的响应。很好。我打算在java中使用这一点。我已经找到了一些例子,并在eclipse中尝试过,但有些东西我不知道如何获得服务“吊带”,如下面给定的代码所示:或者换句话说,如何生成一个QueryBuilder对象。
我需要的任何特定的JAR,或者我需要在我的PC上安装Apache,我不确定有谁能分享这一点,因为我是CQ5新手,不知道。
示例代码如下:
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();发布于 2014-01-10 10:52:21
如果您使用的是Java类而不是JSP,则可以使用@Reference注释对给定服务进行查找--这将找到由OSGi注册的匹配服务,并将其实现返回给您。
来自Felix SCR文件
@Reference注释定义了对服务组件运行时提供给组件的其他服务的引用。
然后,您的代码变得简单:
@Reference
QueryBuilder qbuilder;发布于 2014-02-18 04:07:28
这可以使用adobe magic...Add来实现,这是类中的一个私有字段,用于保存ComponentContext。
private ComponentContext context;实现激活方法:
protected void activate(ComponentContext context) {
this.context = context;
}然后,您可以使用这个上下文获取queryBuilder:
ServiceReference queryBuilderReference = context.getBundleContext().getServiceReference(QueryBuilder.class.getName());
QueryBuilder queryBuilder = (QueryBuilder) context.getBundleContext().getService(queryBuilderReference);https://stackoverflow.com/questions/21040299
复制相似问题