cq5 – AEM查询生成器:实现PredicateEvaluator仅用于排序

我正在尝试实现PredicateEvaluator仅用于订购 – 没有过滤.

所以我开始:

public class OrderByTagPredicate implements PredicateEvaluator {


private static final Logger log = Logger.getLogger(OrderByTagPredicate.class.getSimpleName());

public OrderByTagPredicate() {
    super();
}

@Override
public Comparator<Row> getOrderByComparator(final Predicate predicate, final EvaluationContext context) {
    return new Comparator<Row>() {

        @Override
        public int compare(Row o1, Row o2) {
            // TODO Auto-generated method stub
            return 0;
        }
    };
}


@Override
public boolean canFilter(Predicate arg0, EvaluationContext arg1) {
    return true;
}

@Override
public boolean canXpath(Predicate arg0, EvaluationContext arg1) {
    return true;
}

@Override
public FacetExtractor getFacetExtractor(Predicate arg0, EvaluationContext arg1) {
    return null;
}

@Override
public String[] getOrderByProperties(Predicate arg0, EvaluationContext arg1) {
    return null;
}

@Override
public String getXPathExpression(Predicate arg0, EvaluationContext arg1) {
    return null;
}

@Override
public boolean includes(Predicate arg0, Row arg1, EvaluationContext arg2) {
    return true;
}

@Override
public boolean isFiltering(Predicate arg0, EvaluationContext arg1) {
    return false;
}       

}

我在谓词中注册了:
   query.registerPredicateEvaluator(“orderbytag”,new OrderByTagPredicate());
并添加了地图:map.put(“orderbytag”,“xxx”);然后用于创建PredicateGroup.

我试图通过在OrderByTagPredicate类的所有方法中放置断点来调试,但似乎方法“getOrderByComparator(…)”从未被调用过.

任何线索?

最佳答案 通过在地图中添加以下内容解决:

map.put( “排序依据”, “orderbytag”);

orderby子句丢失了.添加此子句使AEM使用所谓的PredicateEvalutor排序方法来执行!

点赞