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