前提・実現したいこと
Java Springフレームワークで、
org.springframework.data.domain.Page を使用し、
ページング処理を行いたいと考えております。
まずは15件中10件のデータを取得することから始めています。
OracleSql11gを使用しているので、
最初betweenを使用し、ページ指定しておりましたが、
全件数も必要となりこの方法に移行しました。
経験としてはかなり初心者です。
サイトでの質問も初めてですので、
足りない情報などございましたらご教授頂けますと幸いです。
開発環境はeclipseです。
発生している問題・エラーメッセージ
Pageableにページサイズを10としているのにも関わらず、
返ってくるPage情報にはgetContent()に全件入っています。
getNumberOfElement()は15件で、
getSize()は10件です。
getTotalPages()は想定どおり2が取得できています。
該当のソースコード
Page処理に関係がありそうな箇所を抜粋。
Serviceクラスは特に何もせずにDaoクラスを呼び出すだけなので割愛しております。
コントローラクラスのメソッド
Java
1 @Autowired 2 PageInformation pageInformation; 3 4 @RequestMapping(path = "/view/page/{pageNo}" , method = RequestMethod.POST) 5 public String pageList(SearchForm searchForm, Model model, Errors errors) throws Exception { 6 // TODO ページング処理 7 int pageNo = searchForm.getPageNo(); 8 PageRequest pageRequest = new PageRequest(pageNo-1, 10); 9 10 // 検索処理 11 Page<Information> aList = operationService.getInformations(pageRequest, searchForm); 12 pageInformation.setPageInfo(aList); 13 14 // 検索結果反映 15 model.addAttribute("pageInformation", pageInformation); 16 17 return initview(model); 18 }
Daoクラスの該当メソッド
Java
1public class JdbcADao implements ADao { 2 3 @Autowired 4 private JdbcTemplate jdbcTemplate; 5 6 public Page<Information> findInformation(SearchForm form, Pageable pageable) { 7 String whereStatement = "TRN_A.DELETE_FLAG = 0"; 8 PreparedStatementSetter stmt = null; 9 10 // 検索条件のSQL文を作成 11 String sendSQL = Sql.SELECT_FRESH_SEARCH.replace(":whereStatement", whereStatement + " "); 12 List<Information> result = jdbcTemplate.query(sendSQL, stmt, informationRowMapper(false)); 13 Page<Information> pageList = new PageImpl<Information>(result, pageable, result.size()); 14 15 return pageList; 16 } 17 18 private RowMapper<Information> informationRowMapper(boolean download) { 19 return new RowMapper<Information>() { 20 public Information mapRow(ResultSet rs, int rowNum) throws SQLException { 21 22 ...略... 23 24 return info; 25 } 26 }; 27 } 28}
情報取得
java
1 public void setPageInfo(Page<Information> _page) { 2 this.resultFreshListCount = _page.getTotalElements(); 3 this.totalPages = _page.getTotalPages(); 4 this.currentPage = _page.getNumber() + 1; 5 this.freshList = _page.getContent(); 6 this.hasNextPage = _page.hasNextPage(); 7 this.hasPreviousPage = _page.hasPreviousPage(); 8 }
試したこと
SQLでbetween指定したままPageを返すと、
(当たり前ですが)ページ数が1となってしまいました。
https://stackoverflow.com/questions/26720768/spring-data-pageimpl-not-returning-page-with-the-correct-size
こちらの質問を拝見しましたが、
PagedListHolderというものを使わないといけないのか?とあまり納得いっておりません。。。
補足情報(FW/ツールのバージョンなど)
http://bookmount8.blog.fc2.com/blog-entry-40.html
こちらのサイトを参考にプログラムを組み立てました。
あなたの回答
tips
プレビュー