彭老师:您好!请教个在jdonframework中关于分页的问题???

彭老师:您好!请教个在jdonframework中关于分页的问题???

我在ClassListForm中写到:
MultiPages:pager actionFormName="classListForm" page="/classesListAction.do?count=5&w=(class_id<1000)&o=(class_id desc)"

但运行后,无法自动显示分页信息,请教如何解决?????

谢谢彭老师百忙中多多指导!

另外,jdonframework的open sources哪里能得到多多学习一下。
多谢!

啊,源码下载应该可以方便找到:
http://sourceforge.net/projects/jdon/

你在page中classesListAction.do只要写查询条件即可,count其他信息无需写了,只要classesListAction.java能够接受你的参数&w=(class_id<1000)&o=(class_id desc)就能正常输出,你可以在classesListAction.java中在后台控制输出看看。

实在不行,自己继承MultiPages标签做一个标签类,然后修改MultiPages.tld为你的新类即可。

Hi:彭老师您好!
我试着在在page中classesListAction.do只写查询条件,count其他信息没写,而且在classesListAction.java我一开始就能接收参数&w=(class_id<1000)&o=(class_id desc)并能正常输出,可是不写count信息,怎么知道并控制每页显示多少条纪录呢?即便是这样也还是没有分页信息,所有的纪录全部显示出来了,可是我想要最初的分页结果。

谢谢,烦请彭老师您百忙中能具体的详细指导一下,或给个带条件参数的样例,多谢!!!!!

>是不写count信息
不是在标签里写,是网址调用时使用classesListAction.do?start=X&count=X

彭老师:您好!
圣诞快乐!新年快乐!
现在情况是这样的(上两次我没说清楚):

我在ClassListForm中这样写到(没有加count):

MultiPages:pager actionFormName="classListForm" page="/classesListAction.do?w=(class_id<1000)&o=(class_id desc)"

我在struts-config.xml相关部分中这样写到(加了count):
global-forwards
forward name="classes" path="/classesListAction.do?count=5" /
。。。
/global-forwards
action-mappings
。。。。
action name="classesActionForm" path="/classesSeeAction" type="com.jdon.strutsutil.ModelSaveAction"
scope="request" validate="true" input="/classesQr.jsp"
forward name="success" path="/classesListAction.do?count=5" /
forward name="failure" path="/classesListAction.do?count=5" /
/action
。。。。
/action-mappings

我在网址调用时这样写到(加了count和start):

http://localhost:8080/jxtWeb/classesListAction.do?w=(class_id<1000)&o=(school_id)&count=5&start=15

结果是这样的(数据库实际有13条纪录):
1:在网址调用时不加&count=5&start=15时,无分页信息,显示所有13条纪录;
2:在网址调用时加&count=5&start=0时,无分页信息,显示5条,分页部分仅显示1,而且无任何其他信息显示及连接;
3:在网址调用时加&count=5&start=5时,显示5条,分页部分仅显示[上页 ] 1 2 ;
其中[上页]连接:
1连接:
[url=http://localhost:8080/jxtWeb/classesListAction.do?w=(class_id<1000)&o=(school_id)&count=5&start=0]
2无连接;(注:上页和1连接相同)

4:在网址调用时加&count=5&start=10时,显示3条,分页部分仅显示[上页 ] 1 2 3 ;
其中[上页]连接:
1连接:
[url=http://localhost:8080/jxtWeb/classesListAction.do?w=(class_id<1000)&o=(school_id)&count=5&start=0]
2连接:[/url][url=http://localhost:8080/jxtWeb/classesListAction.do?w=(class_id<1000)&o=(school_id)&count=5&start=5]
3无连接

问题是:
1、start参数我只能写一次,值该写多少也不知道,要不就得知道总记录数和count值,在页面里算出来,不能自动跟出来;
2、关键是在上述(4:)项时我点击2连接后,分页信息部分就同(3:)项结果,无[下页]等正常分页信息;
3、如果去掉条件参数(w=(class_id<1000)&o=(school_id)),一切正常,可实际我需要这些参数。

麻烦彭老师您百忙中给多多指教,帮帮忙解决一下这些问题。
多谢!多谢!

关键是你将根据查询条件:w=(class_id<1000)&o=(school_id)),
得到的结果总数在后台打印出来,可能是你的Dao层的SQL语句有误。

>1:在网址调用时不加&count=5&start=15时,无分页信息,显示所有13条纪录;
不加,相当于count=20&start=0进行调用,所以你的13条小于20,就全部显示。

>2:在网址调用时加&count=5&start=0时,无分页信息,显示5条,分页部分仅显示1,而且无任何其他信息显示及连接;

出现这个情况,可能是你的Dao中关于查询select count(1)的查询语句有误。

>3:在网址调用时加&count=5&start=5时,显示5条,分页部分仅显示[上页 ] 1 2 ;

在当前页是没有连接的,所以,&count=5&start=5表示从查询结果的第5条开始,显示5个,这是第2页。


>4:在网址调用时加&count=5&start=10时,显示3条,分页部分仅显示[上页 ] 1 2 3 ;
这是第3页了。

总体来说,现象正常,分页出现问题,关键是DAO的SQL语句,你检查一下,或者贴出来看一下,或你自己验证一下。


彭老师:您好!
我在dao里是这样写的:
public PageIterator getClassess(int start, int count) throws Exception {
String GET_ALL_ITEMS_ALLCOUNT = "select count(1) from CLASS ";

String GET_ALL_ITEMS = "select class_id from CLASS ";

return pageIteratorSolverOfUser.getDatas("", GET_ALL_ITEMS_ALLCOUNT,
GET_ALL_ITEMS, start, count);
}

public PageIterator getClassessCon(int start, int count, String con,
String order) throws Exception {
String GET_ALL_ITEMS_ALLCOUNT = "select count(1) from CLASS where "
+ con + " order by " + order;

String GET_ALL_ITEMS = "select class_id from CLASS where " + con
+ " order by " + order;

return pageIteratorSolverOfUser.getDatas("", GET_ALL_ITEMS_ALLCOUNT,
GET_ALL_ITEMS, start, count);
}

相应的listAction里是这样写的

public PageIterator getPageIterator(HttpServletRequest request,
int start, int count) {
PageIterator pageIterator = null;
String con,order;
try {
TestService testService = (TestService) WebAppUtil.getService(
"testService", request);
con = request.getParameter("w");

con = con.substring(1,con.length()-1);
//if (con1.toUpperCase().equalsIgnoreCase("ALL"))
// con1 = "1+1";
order = request.getParameter("o");
order = order.substring(1,order.length()-1);
pageIterator = testService.getAllClassessCon(start, count, con,order);
} catch (Exception ex) {
logger.error(ex);
}
return pageIterator;

}

服务里(testservice)是这样写的

。。。
public PageIterator getAllClassess(int start, int count);

public PageIterator getAllClassessCon(int start, int count,String con,String order);

服务实现里(TestServicePOJOImp)是这样写的

public PageIterator getAllClassess(int start, int count) {
PageIterator pageIterator = new PageIterator(PageIterator.EMPTY, 0,
false);
try {
pageIterator = jdbcDao.getClassess(start, count);
} catch (Exception ex) {
logger.error(ex);
}
return pageIterator;

}

public PageIterator getAllClassessCon(int start, int count, String con,String order) {
PageIterator pageIterator = new PageIterator(PageIterator.EMPTY, 0,
false);
try {
pageIterator = jdbcDao.getClassessCon(start, count, con,order);
} catch (Exception ex) {
logger.error(ex);
}
return pageIterator;

}

彭老师:您好!
我在dao里是这样写的:
如上边的帖子

String GET_ALL_ITEMS = "select class_id from CLASS where " + con
+ " order by " + order;

有问题,应该是 where con=? 没有问号。


彭老师:您好!
>String GET_ALL_ITEMS = "select class_id from CLASS where " + con
>+ " order by " + order;
>
>有问题,应该是 where con=? 没有问号。

这条语句我有点不太明白该怎么写:
按照我原来的:
public PageIterator getClassessCon(int start, int count, String con,
String order) throws Exception {
String GET_ALL_ITEMS_ALLCOUNT = "select count(1) from CLASS where "
+ con + " order by " + order;

String GET_ALL_ITEMS = "select class_id from CLASS where " + con
+ " order by " + order;

return pageIteratorSolverOfUser.getDatas("", GET_ALL_ITEMS_ALLCOUNT,
GET_ALL_ITEMS, start, count);
}

调用getClassessCon(int start, int count, String con,
String order)时,con的值如为class_id<1000 order的值为class_id desc这样的话
String GET_ALL_ITEMS = "select class_id from CLASS where " + con
+ " order by " + order;
就变为:String GET_ALL_ITEMS = "select class_id from CLASS where " + "class_id<1000"
+ " order by " + "class_id desc";
也即:
String GET_ALL_ITEMS = "select class_id from CLASS where class_id<1000 order by class_id desc";
我不太清楚 有问题,应该是 where con=? 没有问号。该怎么处理?

那是对的,你不介意将系统发到我信箱,我看一下。