

【目標】  
Spring boot を使用して、検索画面の値を保持しつつ、ページネーションを行いたいです。  
因みに、検索結果をDBから取得して表示させる所までは実装できています。

【質問内容】  
検索画面の値を保持しつつ、ページネーションを行うコーディングを行いたいのですが、  
以下の点で行き詰っています。

・検索結果画面の次のページ番号をクリックすると、次の検索結果が表示されない。  
(Controllerに対してGetを送っているからだと思っている。。)

尚、値の保持には hidden を使用する実装にしたいです。  
気付いた点やアドバイスだけでも大丈夫です。  
どなたか、ご教示の程よろしくお願いします。

【使用言語、ツール等】  
・Spring boot  
・java  
・Thymeleaf  
・JPA

【ソースコード】  
■添付のソースコード  
TestController (Controller)  
BeginDisplay.html (初期表示の検索画面)  
ResultDisplay.html (検索結果の表示画面)

・TestController (Controller ) java

[code]

    package com.example.demo.controller;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.domain.Page;
    import org.springframework.data.domain.Pageable;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.servlet.ModelAndView;
    
    import com.example.demo.entity.TestEntity;
    import com.example.demo.service.TestService;
    
    @Controller
    @RequestMapping(value = "/lesson2")
    public class TestController {
    
        private static final String VIEW = "ResultDisplay";
    
    
    
        @GetMapping("/search")
            public String startdisplay(){
                return "BeginDisplay";
            }
    
            @Autowired
            public TestService testservice;
    
            @PostMapping("/search")
            public ModelAndView search( ModelAndView mov,
                    @RequestParam(name="title",required = false) String title,
                    @RequestParam(name="titleKana",required = false) String titleKana,
                    //@ModelAttribute SearchForm form,
                    Pageable pageable
                    ) {
                //ModelAndView
                //addObject(名前,保管するオブジェクト)
                mov.setViewName(VIEW);
                mov.addObject("title",title);
                mov.addObject("titleKana",titleKana);
                   Page<TestEntity> resultdata = testservice.searchmaterial(title,titleKana,pageable);
                    mov.addObject("result",resultdata);
                    mov.addObject("resultSize", resultdata.getSize());
                    mov.addObject("page",resultdata);
                    return mov;
            }
    
    }
    
    
[/code]

・BeginDisplay.html (初期表示の検索画面)

[code]

    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org">
    <head>
    <meta charset="UTF-8">
    <title>Material Search Data</title>
    </head>
    <body>
      <form method="POST" action="">
      <p>タイトル　：　<input type="text" id="title" name="title" th:value="${title}"></p>
      <p>タイトルカナ　：　<input type="text" id="title_kana" name="titleKana" th:value="${titleKana}"></p>
      <p><input type="submit"  name="id" value="検索"></p>
      </form>
    
    
    
        <div th:if="${resultSize > 0}"><label th:text="${resultSize}"></label>件</div>
        <table border="1" th:if="${resultSize > 0}">
       <tr>
        <td>material_no</td>
        <td>title</td>
        <td>title_kana</td>
        <td>reg_date</td>
       </tr>
    
       <tr th:each="data : ${result}">
        <td th:text="${data.materialNo}"/>
        <td th:text="${data.title}"/>
        <td th:text="${data.titleKana}"/>
        <td th:text="${data.regDate}"/>
       </tr>
      </table>
    </body>
    </html>
    
[/code]

・ResultDisplay.html (検索結果の表示画面)

[code]

    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org"
          xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
    <head>
    <meta charset="UTF-8">
    <title>Material Search Data</title>
    </head>
    <body>
      <form method="POST" action="">
      <p>タイトル　：　<input type="text" id="title" name="title" th:value="${title}"></p>
      <input type="hidden" name="title_serach" id="title_serach" th:value="${title}">
      <p>タイトルカナ　：　<input type="text" id="title_kana" name="titleKana" th:value="${titleKana}"></p>
      <input type="hidden" name="titleKana_serach" id="titleKana_serach" th:value="${titleKana}">
      <p><input type="submit"  name="id" value="検索"></p>
      </form>
    
    
    
        <div th:if="${resultSize > 0}"><label th:text="${resultSize}"></label>件</div>
        <table border="1" th:if="${resultSize > 0}">
       <tr>
        <td>material_no</td>
        <td>title</td>
        <td>title_kana</td>
        <td>reg_date</td>
       </tr>
    
       <tr th:each="data : ${result}">
        <td th:text="${data.materialNo}"/>
        <td th:text="${data.title}"/>
        <td th:text="${data.titleKana}"/>
        <td th:text="${data.regDate}"/>
       </tr>
      </table>
    
    
     <form th:name=f th:action="@{/pagenate}" th:object="${page}" method="post">
        <div class="float-right">
          <div>
            <span th:text="${page.number+1}"></span>
            <input type="hidden" name="number_serach" id="number_serach" th:value="${page.number+1}">
        <span>/</span>
        <span th:text="${page.totalPages}"></span>
        <span>頁を表示</span>
          </div>
          <div th:fragment='paginationbar'>
            <ul>
              <li class="page-item">
                  <span th:if="${page.first}">←先頭</span>
                <a th:if="${not page.first}" th:href="@{${url}(page=0)}">←先頭</a>
              </li>
              <li class="page-item" th:each='i : ${#numbers.sequence(0, page.totalPages-1)}'>
                <span th:if='${i}==${page.number}' th:text='${i+1}'>1</span>
                <a th:if='${i}!=${page.number}' th:href="@{${url}(page=${i})}">
                <input type="hidden" name="i_serach" id="i_serach" th:value="${i}">
                    <span th:text='${i+1}'>1</span>
                </a>
              </li>
              <li class="page-item">
                <span th:if="${page.last}">末尾➝</span>
                <a th:if="${not page.last}" th:href="@{${url}(page=(${page.totalPages}-1))}">末尾➝</a>           </li>
            </ul>
           </div>
         </div>
       </form>
    <a href="javascript:document.f.submit()">ダウンロード</a>
    </body>
    </html>
    
[/code]


CC BY-SA 4.0
2020-08-15T01:24:38.637
69563
2020-08-15T02:10:07.053
2020-08-15T02:10:07.053
37279
37279
question
java html spring thymeleaf jpa
Spring bootで値を保持したままページネーションを行いたい