Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JCR SQL2查询显然没有提供任何结果_Java_Aem_Jcr_Jcr Sql2 - Fatal编程技术网

Java JCR SQL2查询显然没有提供任何结果

Java JCR SQL2查询显然没有提供任何结果,java,aem,jcr,jcr-sql2,Java,Aem,Jcr,Jcr Sql2,我正在尝试基于JCRAPI为CQ创建一个页面。我想查询属性中包含特定字符串的页面 查询本身(JCR-SQL2)如下所示(我在CQ Web界面上对其进行了测试,并提供了结果): 这是我在JSP页面中的尝试: String stmt = "SELECT * FROM [nt:base] AS s WHERE ISDESCENDANTNODE([/content]) AND s.[cq:template] = 'some/path/to/destination'"; Query que

我正在尝试基于JCRAPI为CQ创建一个页面。我想查询属性中包含特定字符串的页面

查询本身(JCR-SQL2)如下所示(我在CQ Web界面上对其进行了测试,并提供了结果):

这是我在JSP页面中的尝试:

    String stmt = "SELECT * FROM [nt:base] AS s WHERE ISDESCENDANTNODE([/content]) AND s.[cq:template] = 'some/path/to/destination'";
    Query query = currentNode.getSession().getWorkspace().getQueryManager().createQuery(stmt, Query.JCR_SQL2);
    QueryResult results = query.execute();
    if (results.getNodes() != null && results.getNodes().hasNext()) {
        NodeIterator it = results.getNodes();

        while (it.hasNext()) {
            Node node = it.nextNode();
            String npath = node.getPath();
            Page contentPage = pageManager.getContainingPage(resourceResolver.getResource(npath));
            String title = contentPage.getTitle();
            String path = contentPage.getPath() + ".html";
            %>
            <div class="searchresult"><a href="<%= path %>"><%= title %></a></div>
            <%
        }
    }

这不是因为您创建了两次迭代器: 首先

if(results.getNodes()!=null&&results.getNodes().hasNext()){

然后

NodeIterator it=results.getNodes();

我只会尝试这样创建一次:

   QueryResult results = query.execute();
   NodeIterator it = results.getNodes();
   if (it.hasNext()) {
   ...
   }
查看SimpleQueryResult的源代码,它做了一些奇怪的事情,实例变量rowIterator被设置为null,因此下次调用getRows时,您将转到条件的其他部分,您将遇到您提到的错误:

  public synchronized RowIterator getRows() throws RepositoryException {
        if (rowIterator != null) {
            RowIterator iterator = rowIterator;
            rowIterator = null;
            return iterator;
        } else {
            throw new RepositoryException(
                    "This query result has already been iterated through");
        }
}

这不是因为您创建了两次迭代器: 首先

if(results.getNodes()!=null&&results.getNodes().hasNext()){

然后

NodeIterator it=results.getNodes();

我只会尝试这样创建一次:

   QueryResult results = query.execute();
   NodeIterator it = results.getNodes();
   if (it.hasNext()) {
   ...
   }
查看SimpleQueryResult的源代码,它做了一些奇怪的事情,实例变量rowIterator被设置为null,因此下次调用getRows时,您将转到条件的其他部分,您将遇到您提到的错误:

  public synchronized RowIterator getRows() throws RepositoryException {
        if (rowIterator != null) {
            RowIterator iterator = rowIterator;
            rowIterator = null;
            return iterator;
        } else {
            throw new RepositoryException(
                    "This query result has already been iterated through");
        }
}