我想在jpa,java,Datatables.js
中进行分页我的控制器
@ResponseBody
@RequestMapping(value = "/notice_selectList.do")
public Map<String, Object> notice_selectList(HttpServletRequest request, Model model, @PageableDefault Pageable pageable) throws Exception{
Map<String, Object> paramMap = RequestUtil.getParameterMap(request);
Map<String, Object> resultMap = new HashMap<>();
int length = Integer.parseInt((String) paramMap.get("length")); //한페이지당 보여줄 글 갯수
int start = Integer.parseInt((String) paramMap.get("start")); //시작페이지
int pageLength = (length == 0)?20:length;
int startPage = (start == 0)?1:start + 1;
List<Sort.Order> orders = new ArrayList<Sort.Order>();
orders.add(new Sort.Order(Sort.Direction.DESC, "noticeNo"));
Sort sort = Sort.by(orders);
PageRequest pageRequest = PageRequest.of(startPage, pageLength, sort);
Page<Notice> noticeList = repository.findAll(pageRequest);
//------------- dataTables에 맞게 키값 세팅
//--------------data:데이터
//--------------recordsTotal,recordsFiltered:갯수 및 페이징
resultMap.put("data" , noticeList.getContent());
resultMap.put("recordsTotal" , noticeList.getTotalElements());
resultMap.put("recordsFiltered" , noticeList.getTotalElements());
return resultMap;
}
我的存储库是
public interface NoticeRepository extends JpaRepository<Notice, Long>, QuerydslPredicateExecutor<Banner>{
public Page<Notice> findAll(Pageable pageable);
}
第一页正确查看,
select*
from NOTICE
order by NOTICE_NO desc
limit 0, 20
但如果我点击第二页, 结果是
select*
from NOTICE
order by NOTICE_NO desc
limit 400, 20
然后点击第三页,
select*
from NOTICE
order by NOTICE_NO desc
limit 800, 20
为什么会这样?
答案 0 :(得分:0)
首先,我将调试参数length和start包含的内容。如果它不是20或40并且paraMap确实包含这些值,我会查看我的请求通过网络(浏览器中的开发工具)。如果它发送正确的值并且启动仍然是错误的,请发布URL路径,我认为它是一个POST请求,让我们看一下。
如果您的请求中的值确实为200或400,请查看您的调用前端,可能是一些字符串Concantation,或者如果您使用Struts,Form Parsing问题。一个常见的错误是使用组合框的值和索引或类似的想法。如果您在前端搜索,请使用浏览器开发工具调试请求或表单,在模型中放置断点并尝试确定值切换到高位数的位置。