我正在尝试实现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排序方法来执行!