簡體   English   中英

Spring數據分頁和AJAX

[英]Spring Data Pagination & AJAX

我有以下控制器,我剛剛將分頁包括在返回的結果中

@RequestMapping(value = "/search/{person}", produces="application/json", method = RequestMethod.GET)
    public Page<Person> findAllPersons(@PathVariable String person) {
    Page<Person> list = personRepo.findAll(new PageRequest(1, PAGE_SIZE));
    return list;
}

我現在正在嘗試弄清楚如何真正查看這些結果-在Person表上的搜索是它自己的AJAX請求,在UI工具上選擇“下一個”或“上一個”可以啟動它自己的GET

<a id="previous" href="onclick="setPageNumber(1)">
<a id="next" href="onclick="setPageNumber(2)">
function setPageNumber(num) { //relaunch request with page number value retrieved from previous or next}

我應該像這樣將pageNumber作為@PathVariable包括在內:

@RequestMapping(value = "/search/{person}/{pageNumber}", produces="application/json", method = RequestMethod.GET)
public Page<Person> findAllPersons(@PathVariable String person, @PathVariable int pageNumber) {
    Page<Person> list = personRepo.findAll(new PageRequest(pageNumber, PAGE_SIZE));
    return list;
}

還是應該將pageNumber設置為一個完全獨立的控制器方法,以某種方式使用pageNumber參數調用findAllPersons 我可能在這里使自己感到困惑-歡迎任何輸入,謝謝!

對於REST服務,我將其放在參數中,而不是URI page_start = X&page_size = Y。

我知道這篇文章很長時間沒有活躍,但是對於仍然在尋找將Spring分頁與Ajax結合使用的任何人,這里有一些可能的解決方案:

1.如果您的存儲庫是JpaRepository的實例(或更確切地說是PagingAndSortingRepository ),則可以簡單地將Pageable傳遞給它:

@Controller
public class FooController {

    //...

    @GetMapping("/foo/list")
    public List<Foo> handleList(Pageable pageable) {
        return fooRepository.findAll(pageable);
    }

    //...
}

2.除了Pageable ,您還可以將分頁參數檢索為@RequestParam並自己創建一個PageRequest 如果項目不使用Spring Data和JPA,則此方法可能很有用:

@Controller
public class FooController {

    //...

    @GetMapping("/foo/list")
    public List<Foo> handleList(
        @RequestParam(value = "size", required = false) Optional<Integer> pageSize,
        @RequestParam(value = "page", required = false) Optional<Integer> pageNumber,
        @RequestParam(value = "sort", required = false) Sort sort,
    ) {
        PageRequest pageable = new PageRequest(pageNumber.orElse(0), pageSize.orElse(10), sort);
        return fooRepository.customfindAll(pageable);
    }

    //...
}

(例如高於該存儲庫可能是延伸的JDBCRepository類如這一個

對於這兩種可能的解決方案的AJAX部分,可以使用類似的方法:

// ... handle pageNo, listSize etc.

var url = '/yourprj/foo/list?page=' + pageNo + '&size=' + listSize
$.ajax({
    type: "GET",
    contentType: "application/json",
    url: url,
    success: function(result) {
        // handle Foo list...
    }
});

3.或者,如果您使用Thymeleaf + Spring Data ,則有一種方言可以自動添加分頁。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM