关于spring-ldap 分页的问题

__陀飞轮 2012-02-10 03:56:25
我使用spring-ldap实现分页功能,抛出如下错误:
org.springframework.ldap.CommunicationException: [LDAP: error code 2 - paged results cookie is invalid]; nested exception is javax.naming.CommunicationException: [LDAP: error code 2 - paged results cookie is invalid]; remaining name ''
自己排查的结果是cookie没有在再次查询时放入,导致以上问题,但实在是不知道怎么搞了,还请哪位达人帮帮忙,感激不尽~~~ 代码如下:

//curPage:要查询的页数,pageSize:每页数据量
@Override
public List getUserInfo(int curPage, int pageSize) throws Exception
{
// 用于存储条目列表
List list = new ArrayList();
AttributesMapper attributesMapper = new AttributesMapper() {
@Override
public Object mapFromAttributes(Attributes attributes)
throws NamingException {
return attributes;
}
};
// 设置filter
String filter = "objectclass=person";
// 声明搜索控件
SearchControls searchControls = new SearchControls();
// 指定检索范围
searchControls.setSearchScope(SearchControls.ONELEVEL_SCOPE);
/*
* 0:OBJECT_SCOPE,搜索指定的命名对象。
* 1:ONELEVEL_SCOPE,只搜索指定命名对象的一个级别,这是缺省值。
* 2:SUBTREE_SCOPE,搜索以指定命名对象为根结点的整棵树 **/
// 声明属性名集合,并由Map类型转换为String类型数组
// 设置要返回的属性,即所有
String[] s = {"uid","initials","userPassword","employeeNumber","displayName","businessCategory","departmentNumber","homePhone"," homePostalAddress","mail","telexNumber","telephoneNumber","postalCode","title","givenName","destinationIndicator","roomNumber","description","sn","cn"};
searchControls.setReturningAttributes(s);
// 设置handler,handler里存储了条目的list
CollectingNameClassPairCallbackHandler handler = (CollectingNameClassPairCallbackHandler) new AttributesMapperCallbackHandler( attributesMapper);
// 设置页面大小
//PagedResultsControl pagedResultsControl = new PagedResultsControl(1, true);
PagedResultsResponseControl p = new PagedResultsResponseControl(PagedResultsResponseControl.OID,true,null);
PagedResultsCookie pagedResultsCookie = new PagedResultsCookie(p.getCookie());
PagedResultsRequestControl requestControl=new PagedResultsRequestControl(pageSize,pagedResultsCookie);
//PagedResultsRequestControl requestControl = new PagedResultsRequestControl(pageSize);
// 分为两种情况,第一种只取第一页,第二种取其他页数
if (curPage == 1) {
try {
// 只获取第一页
this.getLdapTemplate().search("", filter, searchControls, handler,requestControl);
list = handler.getList();
} catch (Exception e){
System.out.println("分页查询异常1" + e);
}
}else{
try
{
// 按分页搜索,并将结果存进handler,这里获取第一页
this.getLdapTemplate().search("", filter, searchControls, handler,requestControl);
// 循环获取其余的页数,直至目标页
for (int i = 0, cur_1 = curPage - 1, cur_2 = curPage - 2; i < cur_1; i++)
{
// 声明临时变量handlerTemp。用于每次存储该次搜索的页面信息
CollectingNameClassPairCallbackHandler handlerTemp = new AttributesMapperCallbackHandler(attributesMapper);
// 设置页面大小
// PagedResultsCookie pagedResultsCookie1 = new PagedResultsCookie(p.getCookie());
requestControl = new PagedResultsRequestControl(pageSize,requestControl.getCookie());
// 在上次查询的基础上继续往后查询
this.getLdapTemplate().search("", filter, searchControls,handlerTemp, requestControl);
// 检测为当前页,获取当前页的条目列表
if (i == cur_2){
list = handlerTemp.getList();
}
}
}catch (Exception e){
System.out.println("分页查询异常2" + e);
}
}
return list;
}



...全文
550 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
javaliuliu 2013-06-27
  • 打赏
  • 举报
回复
引用 5 楼 ygvbnh 的回复:
[quote=引用 4 楼 javaliuliu 的回复:] 会不会spring-jdap.ar的版本有问题?我就用的这段代码,没问题!
哥你用的是什么版本的jar 我的是1.3.1 我的报错 你能不能把你的代码引用的类地址给我看下,看是不是我引用错了[/quote] 改为1.1.1
荒野大NM 2013-06-27
  • 打赏
  • 举报
回复
引用 4 楼 javaliuliu 的回复:
会不会spring-jdap.ar的版本有问题?我就用的这段代码,没问题!
哥你用的是什么版本的jar 我的是1.3.1 我的报错 你能不能把你的代码引用的类地址给我看下,看是不是我引用错了
javaliuliu 2013-06-08
  • 打赏
  • 举报
回复
会不会spring-jdap.ar的版本有问题?我就用的这段代码,没问题!
lf870602 2012-10-30
  • 打赏
  • 举报
回复
这是我的邮箱,谢谢,liuxingwuji@126.com
lf870602 2012-10-30
  • 打赏
  • 举报
回复
你好,这问你你解决了吗,可以把源码发给我一份吗
__陀飞轮 2012-02-13
  • 打赏
  • 举报
回复
不会吧 无人问津啊~~~哪位大神帮助一下呀~~~自己顶起

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧