繁体   English   中英

如何在Jpa中使用Pageable

[英]How to use Pageable in Jpa

我想在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

为什么会这样呢?

首先,我将调试参数length和start所包含的内容。 如果不是20或40,并且paraMap确实包含这些值,我将通过网络调查我的请求(浏览器中的Dev工具)。 如果它发送正确的值并且开始仍然错误,则发布URL路径,我认为它是一个POST请求,然后在那里查看。

如果您的请求中的值确实为200或400,请查看您的调用前端,也许是一些String Concantation,或者如果您使用Struts,Form Parsing问题。 一个常见的错误是使用组合框或类似的东西的值和索引。 如果在前端中搜索,请使用浏览器开发工具调试请求或表单,在模型中放置断点,然后尝试查明值切换到高数字的位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM