关于jfinal分页 isLastPage 判断问题

Page 代码片段
 
public boolean isLastPage() {
		return pageNumber == totalPage;
}
public boolean isFirstPage() {
		return pageNumber == 1;
}

pageNumber是从1开始的,如果数据库中没有查询到结果,则totalPage的大小为0.。这样就会导致isLastPage返回值是false。我感觉这样就不符合常理了。正常情况,如果没有查询到结果。isLastPage的返回值应该也是true。

评论区

JFinal

2016-11-07 11:00

感谢反馈,已做备忘,jfinal 2.3 会考虑这个地方返回什么最恰当

zempty

2016-11-07 12:11

不错,大家一起研究…,能发现更多big.

lyh061619

2016-11-08 17:16

@JFinal 波总:好像我也发个分页问题,不知是不是bug,如:数据总14条记录,测试时试着传入pageNumber=1和pageSize=1,从数据库获得的分页数据,这时界面通过${page.pageNumber}得到的结果等于6,如果我把传的pageSize修改为:pageSize=2的话,界面$(page.pageNumber)是正常了;

JFinal

2016-11-08 17:19

@lyh061619 如果sql 的最外层是 group by,需添加一个参数:
paginate(1, 10, true, "select * ", ...); 注意第三个参数为 true,是告诉分页 api,这个 sql 的最外层是 group by

注意,这里一定是最外层是 group by 才这样,如果 sql 嵌套过了,内层用的 group by 则不需要

lyh061619

2016-11-08 17:21

@JFinal 没用到group by 就是简单的一段sql查询而已。

lyh061619

2016-11-08 17:23

@JFinal 这个是我代码:
/**
* 条件查询
*
* @param p 分页参数
* @param objs - 接收资源
* @return
*/
public Page list(int p, Object... objs) {
if (0 == p) {
p = Const.Page.NUM;
}
String select;
String from;
List paras = new ArrayList<>();
StringBuilder sql = new StringBuilder();
String orderBy;

if (sl.isEmpty(objs) || sl.isEmpty(objs[0])) {
sql.append(" where 1=1");
} else {
paras.add(objs[0]);
sql.append(" where type = ?"); //分类:1:手机;2:企业;3:外贸;4:商城;5:旅游;
}

select = "select *";
from = " from cases";
orderBy = " order by create_at, type";

if (null != paras && paras.size() > 0) {
return new Cases().paginateByCache(Cases.CacheName.NAME, Cases.CacheKey.KEY + objs[0], p, Const.Page.SIZE, select, from + sql.toString() + orderBy, paras.toArray());
} else {
return new Cases().paginateByCache(Cases.CacheName.NAME, Cases.CacheKey.KEY, p, Const.Page.SIZE, select, from + sql + orderBy);
}
}

JFinal

2016-11-08 17:25

@lyh061619 那必然是程序逻辑问题,paginate 用了四年多了,不会出这类错误,多单步调试解决程序逻辑问题

hotsmile

2016-11-23 19:12

我最近发现一个问题,我用的是jfinal2.0版本,用paginate分页的时候,发现当我有13条记录的时候,分页大小是10页,第一页正常,第2也出来的3条记录,是第一页的前三条,没有跟进去,但是确实有这个问题,语句中没有加order by 子句,加了order by 子句就正常了,为啥?

热门反馈

扫码入社