AEM查询生成器:仅为排序实现谓词评估器

AEM查询生成器:仅为排序实现谓词评估器,aem,Aem,我试图实现PredicateEvaluator,只是为了进行排序,而不是进行过滤 所以我从以下几点开始: public class OrderByTagPredicate implements PredicateEvaluator { private static final Logger log = Logger.getLogger(OrderByTagPredicate.class.getSimpleName()); public OrderByTagPredicate() {

我试图实现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;
}       
公共类OrderByTagPredicate实现PredicateEvaluator{
私有静态最终记录器log=Logger.getLogger(OrderByTagPredicate.class.getSimpleName());
public OrderByTagPredicate(){
超级();
}
@凌驾
公共比较器getOrderByComparator(最终谓词谓词,最终求值上下文){
返回新的比较器(){
@凌驾
公共整数比较(第o1行,第o2行){
//TODO自动生成的方法存根
返回0;
}
};
}
@凌驾
公共布尔canFilter(谓词arg0,EvaluationContext arg1){
返回true;
}
@凌驾
公共布尔canXpath(谓词arg0,EvaluationContext arg1){
返回true;
}
@凌驾
公共FacetExtractor getFacetExtractor(谓词arg0,EvaluationContext arg1){
返回null;
}
@凌驾
公共字符串[]getOrderByProperties(谓词arg0,EvaluationContext arg1){
返回null;
}
@凌驾
公共字符串getXPathExpression(谓词arg0,EvaluationContext arg1){
返回null;
}
@凌驾
公共布尔值包括(谓词arg0,行arg1,EvaluationContext arg2){
返回true;
}
@凌驾
公共布尔值isFiltering(谓词arg0,EvaluationContext arg1){
返回false;
}       
}

我将谓词注册到: registerPredicateEvaluator(“orderbytag”,neworderByTagPredicate()); 并将其添加到map:map.put(“orderbytag”、“xxx”);然后用于创建谓词组

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


有线索吗?

通过在地图中添加以下内容来解决:

map.put(“orderby”、“orderbytag”)


缺少orderby子句。添加此子句使AEM使用所谓的PredicateValuer排序方法来执行

当您只想按特定属性排序时,最简单的方法是在用于构建查询的谓词组中包含排序谓词。这样,您甚至不需要担心自定义计算器,因为默认计算器将为您处理它

假设您已经创建了“predicateGroup”,并且希望按“indexName”升序排序,您将执行以下操作:

Predicate orderPredicate = new Predicate(Predicate.ORDER_BY);
orderPredicate.set(Predicate.ORDER_BY, "@" + indexName);
orderPredicate.set(Predicate.PARAM_SORT, Predicate.SORT_ASCENDING);
predicateGroup.add(orderPredicate);