質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Q&A

0回答

2506閲覧

Spring Page情報がPageableで設定した通りにならない

htk_htk

総合スコア3

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

0グッド

0クリップ

投稿2020/12/12 10:53

前提・実現したいこと

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
こちらのサイトを参考にプログラムを組み立てました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問