文档

Java™教程
隐藏目录
排序控件
教程:Java命名和目录接口
课程:JDK 5.0和JDK 6中的新功能

排序控制

当客户端希望服务器发送排序后的搜索结果时,使用排序控制。在客户端需要根据某些标准对结果进行排序,但无法自行执行排序过程的情况下,服务器端排序是很有用的。排序控制在RFC 2891中指定。下面的类提供了支持排序控制所需的功能。

SortKey是基于它服务器对结果进行排序的键的有序列表。

如何使用排序控制?

下面的示例说明了客户端和服务器之间的交互,客户端执行搜索请求并要求基于属性"cn"进行服务器端排序。

  1. 客户端发送搜索请求,请求服务器根据属性"cn"进行服务器端排序。
       
        // 激活排序
         String sortKey = "cn";
         ctx.setRequestControls(new Control[] { 
             new SortControl(sortKey, Control.CRITICAL) });
    
         // 执行搜索
         NamingEnumeration results = 
             ctx.search("", "(objectclass=*)", new SearchControls());
    
    
  2. 服务器根据"cn"属性及其相应的匹配规则对结果进行排序,并响应排序后的条目。
       
        // 遍历排序后的搜索结果
         while (results != null && results.hasMore()) {
             // 显示条目
             SearchResult entry = (SearchResult)results.next();
             System.out.println(entry.getName());
    
             // 处理条目的响应控制(如果有的话)
             if (entry instanceof HasControls) {
                 // ((HasControls)entry).getControls();
             }
         }
         // 检查排序控制的响应 
         Control[] controls = ctx.getResponseControls();
         if (controls != null) {
             for (int i = 0; i < controls.length; i++) {
                 if (controls[i] instanceof SortResponseControl) {
                     SortResponseControl src = (SortResponseControl)controls[i];
                     if (! src.isSorted()) {
                         throw src.getException();
                     }
                 } else {
                     // 处理其他响应控制(如果有的话)
                 }
             }
         }  
    

完整的JNDI示例可以在这里找到。


注意:排序控制受Oracle Directory Server和Windows Active Directory服务器的支持。



上一页: 分页结果控制
下一页: 管理推荐控制