Spring boot 在spring引导中使用form参数进行分页

Spring boot 在spring引导中使用form参数进行分页,spring-boot,pagination,thymeleaf,Spring Boot,Pagination,Thymeleaf,我用的是弹簧靴和百里香 我有一个带有表单的页面,通过特定参数进行搜索,然后将数据作为POST请求提交 该页面在表格中显示结果,效果良好。该表显示了正确的分页选项和结果 问题:当我稍后单击按钮在第2页上显示结果时,上一次搜索的POST数据将丢失 问题:如何在分页期间保留已发布的数据 控制器: @RequestMapping(value = "/list",method = {RequestMethod.POST, RequestMethod.GET}) public String list(@Re

我用的是弹簧靴和百里香

我有一个带有表单的页面,通过特定参数进行搜索,然后将数据作为POST请求提交

该页面在表格中显示结果,效果良好。该表显示了正确的分页选项和结果

问题:当我稍后单击按钮在第2页上显示结果时,上一次搜索的POST数据将丢失

问题:如何在分页期间保留已发布的数据

控制器:

@RequestMapping(value = "/list",method = {RequestMethod.POST, RequestMethod.GET})
public String list(@RequestParam(name = "page", defaultValue = "0") int page,
        @RequestParam(name = "name", defaultValue = "") String name,
        @RequestParam(name = "lastname", defaultValue = "") String lastname,
            Pageable pageable,
            Model model) {

    Pageable pageRequest = new PageRequest(page, 4);
    Cliente cliente = new Cliente();
    Page<Cliente> clientes;



    if (name.equals("") && lastname.equals("")) {
        clientes = clienteService.findAll(pageRequest);

    }else {
        clientes = clienteService.findMatch(name, lastname, pageRequest);
    }


    PageRender<Cliente> pageRender = new PageRender<Cliente>("/listar", clientes);
    model.addAttribute("titulo", "Listado de clientes");
    model.addAttribute("clientes", clientes);

    model.addAttribute("cliente", cliente);
    model.addAttribute("page", pageRender);
    return "listar";
}
<form th:action="@{/listar}" th:object="${cliente}" method="post">
                            <div class="form-group row">
                                <label for="nombre" class="col-sm-2 col-form-label">Nombre</label>
                                <div class="col-sm-6">
                                    <input type="text" th:field="*{nombre}" class="form-control"
                                        th:errorclass="'form-control alert-danger'" /> <small
                                        class="form-text text-danger"
                                        th:if="${#fields.hasErrors('nombre')}" th:errors="*{nombre}"></small>
                                </div>
                            </div>
                            <div class="form-group row">
                                <label for="nombre" class="col-sm-2 col-form-label">Apellido</label>
                                <div class="col-sm-6">
                                    <input type="text" th:field="*{apellido}" class="form-control"
                                        th:errorclass="'form-control alert-danger'" /> <small
                                        class="form-text text-danger"
                                        th:if="${#fields.hasErrors('apellido')}" th:errors="*{apellido}"></small>
                                </div>
                            </div>
                            <div class="form-group row">
                                <div class="col-sm-6">
                                    <input type="submit" th:value="'Buscar'"
                                        class="btn btn-secondary" />
                                </div>
                            </div>


                        </form>
<nav th:fragment="paginator">

    <ul class="pagination">
        <li class="page-item"
            th:class="${page.first? 'page-item disabled': 'page-item'}"><span
            class="page-link" th:if="${page.first}">Primera</span> <a
            class="page-link" th:if="${not page.first}"
            th:href="@{${page.url}(page=0)}">Primera</a></li>


        <li class="page-item"
            th:class="${not page.hasPrevious? 'page-item disabled': 'page-item'}">
            <span class="page-link" th:if="${not page.hasPrevious}">&laquo;</span>
            <a class="page-link" th:if="${page.hasPrevious}"
            th:href="@{${page.url}(page=${page.paginaActual-2})}">&laquo;</a>
        </li>

        <li class="page-item" th:each="item : ${page.paginas}"
            th:class="${item.actual? 'page-item active': 'page-item'}"><span
            class="page-link" th:if="${item.actual}" th:text="${item.numero}"></span>
            <a class="page-link" th:if="${not item.actual}"
            th:href="@{${page.url}(page=${item.numero-1})}"
            th:text="${item.numero}"></a></li>


        <li class="page-item"
            th:class="${not page.hasNext? 'page-item disabled': 'page-item'}">
            <span class="page-link" th:if="${not page.hasNext}">&raquo;</span> <a
            class="page-link" th:if="${page.hasNext}"
            th:href="@{${page.url}(page=${page.paginaActual})}">&raquo;</a>
        </li>
        <li class="page-item"
            th:class="${page.last? 'page-item disabled': 'page-item'}"><span
            class="page-link" th:if="${page.last}">&Uacute;ltima</span> <a
            class="page-link" th:if="${not page.last}"
            th:href="@{${page.url}(page=${page.totalPaginas-1})}">&Uacute;ltima</a>
        </li>
    </ul>

</nav>
@RequestMapping(value=“/list”,method={RequestMethod.POST,RequestMethod.GET})
公共字符串列表(@RequestParam(name=“page”,defaultValue=“0”)int page,
@RequestParam(name=“name”,defaultValue=”“)字符串名称,
@RequestParam(name=“lastname”,defaultValue=”“)字符串lastname,
可分页可分页,
(模型){
Pageable pageRequest=新的pageRequest(第4页);
Cliente Cliente=新客户();
页面客户;
if(name.equals(“”)&&lastname.equals(“”){
clientes=clienteService.findAll(pageRequest);
}否则{
clientes=clienteService.findMatch(name、lastname、pageRequest);
}
PageRender PageRender=新的PageRender(“/listar”,客户);
model.addAttribute(“titulo”、“客户列表”);
model.addAttribute(“客户”,客户);
model.addAttribute(“cliente”,cliente);
model.addAttribute(“页面”,pageRender);
返回“listar”;
}
HTML:

@RequestMapping(value = "/list",method = {RequestMethod.POST, RequestMethod.GET})
public String list(@RequestParam(name = "page", defaultValue = "0") int page,
        @RequestParam(name = "name", defaultValue = "") String name,
        @RequestParam(name = "lastname", defaultValue = "") String lastname,
            Pageable pageable,
            Model model) {

    Pageable pageRequest = new PageRequest(page, 4);
    Cliente cliente = new Cliente();
    Page<Cliente> clientes;



    if (name.equals("") && lastname.equals("")) {
        clientes = clienteService.findAll(pageRequest);

    }else {
        clientes = clienteService.findMatch(name, lastname, pageRequest);
    }


    PageRender<Cliente> pageRender = new PageRender<Cliente>("/listar", clientes);
    model.addAttribute("titulo", "Listado de clientes");
    model.addAttribute("clientes", clientes);

    model.addAttribute("cliente", cliente);
    model.addAttribute("page", pageRender);
    return "listar";
}
<form th:action="@{/listar}" th:object="${cliente}" method="post">
                            <div class="form-group row">
                                <label for="nombre" class="col-sm-2 col-form-label">Nombre</label>
                                <div class="col-sm-6">
                                    <input type="text" th:field="*{nombre}" class="form-control"
                                        th:errorclass="'form-control alert-danger'" /> <small
                                        class="form-text text-danger"
                                        th:if="${#fields.hasErrors('nombre')}" th:errors="*{nombre}"></small>
                                </div>
                            </div>
                            <div class="form-group row">
                                <label for="nombre" class="col-sm-2 col-form-label">Apellido</label>
                                <div class="col-sm-6">
                                    <input type="text" th:field="*{apellido}" class="form-control"
                                        th:errorclass="'form-control alert-danger'" /> <small
                                        class="form-text text-danger"
                                        th:if="${#fields.hasErrors('apellido')}" th:errors="*{apellido}"></small>
                                </div>
                            </div>
                            <div class="form-group row">
                                <div class="col-sm-6">
                                    <input type="submit" th:value="'Buscar'"
                                        class="btn btn-secondary" />
                                </div>
                            </div>


                        </form>
<nav th:fragment="paginator">

    <ul class="pagination">
        <li class="page-item"
            th:class="${page.first? 'page-item disabled': 'page-item'}"><span
            class="page-link" th:if="${page.first}">Primera</span> <a
            class="page-link" th:if="${not page.first}"
            th:href="@{${page.url}(page=0)}">Primera</a></li>


        <li class="page-item"
            th:class="${not page.hasPrevious? 'page-item disabled': 'page-item'}">
            <span class="page-link" th:if="${not page.hasPrevious}">&laquo;</span>
            <a class="page-link" th:if="${page.hasPrevious}"
            th:href="@{${page.url}(page=${page.paginaActual-2})}">&laquo;</a>
        </li>

        <li class="page-item" th:each="item : ${page.paginas}"
            th:class="${item.actual? 'page-item active': 'page-item'}"><span
            class="page-link" th:if="${item.actual}" th:text="${item.numero}"></span>
            <a class="page-link" th:if="${not item.actual}"
            th:href="@{${page.url}(page=${item.numero-1})}"
            th:text="${item.numero}"></a></li>


        <li class="page-item"
            th:class="${not page.hasNext? 'page-item disabled': 'page-item'}">
            <span class="page-link" th:if="${not page.hasNext}">&raquo;</span> <a
            class="page-link" th:if="${page.hasNext}"
            th:href="@{${page.url}(page=${page.paginaActual})}">&raquo;</a>
        </li>
        <li class="page-item"
            th:class="${page.last? 'page-item disabled': 'page-item'}"><span
            class="page-link" th:if="${page.last}">&Uacute;ltima</span> <a
            class="page-link" th:if="${not page.last}"
            th:href="@{${page.url}(page=${page.totalPaginas-1})}">&Uacute;ltima</a>
        </li>
    </ul>

</nav>

名义
阿佩利多
分页:

@RequestMapping(value = "/list",method = {RequestMethod.POST, RequestMethod.GET})
public String list(@RequestParam(name = "page", defaultValue = "0") int page,
        @RequestParam(name = "name", defaultValue = "") String name,
        @RequestParam(name = "lastname", defaultValue = "") String lastname,
            Pageable pageable,
            Model model) {

    Pageable pageRequest = new PageRequest(page, 4);
    Cliente cliente = new Cliente();
    Page<Cliente> clientes;



    if (name.equals("") && lastname.equals("")) {
        clientes = clienteService.findAll(pageRequest);

    }else {
        clientes = clienteService.findMatch(name, lastname, pageRequest);
    }


    PageRender<Cliente> pageRender = new PageRender<Cliente>("/listar", clientes);
    model.addAttribute("titulo", "Listado de clientes");
    model.addAttribute("clientes", clientes);

    model.addAttribute("cliente", cliente);
    model.addAttribute("page", pageRender);
    return "listar";
}
<form th:action="@{/listar}" th:object="${cliente}" method="post">
                            <div class="form-group row">
                                <label for="nombre" class="col-sm-2 col-form-label">Nombre</label>
                                <div class="col-sm-6">
                                    <input type="text" th:field="*{nombre}" class="form-control"
                                        th:errorclass="'form-control alert-danger'" /> <small
                                        class="form-text text-danger"
                                        th:if="${#fields.hasErrors('nombre')}" th:errors="*{nombre}"></small>
                                </div>
                            </div>
                            <div class="form-group row">
                                <label for="nombre" class="col-sm-2 col-form-label">Apellido</label>
                                <div class="col-sm-6">
                                    <input type="text" th:field="*{apellido}" class="form-control"
                                        th:errorclass="'form-control alert-danger'" /> <small
                                        class="form-text text-danger"
                                        th:if="${#fields.hasErrors('apellido')}" th:errors="*{apellido}"></small>
                                </div>
                            </div>
                            <div class="form-group row">
                                <div class="col-sm-6">
                                    <input type="submit" th:value="'Buscar'"
                                        class="btn btn-secondary" />
                                </div>
                            </div>


                        </form>
<nav th:fragment="paginator">

    <ul class="pagination">
        <li class="page-item"
            th:class="${page.first? 'page-item disabled': 'page-item'}"><span
            class="page-link" th:if="${page.first}">Primera</span> <a
            class="page-link" th:if="${not page.first}"
            th:href="@{${page.url}(page=0)}">Primera</a></li>


        <li class="page-item"
            th:class="${not page.hasPrevious? 'page-item disabled': 'page-item'}">
            <span class="page-link" th:if="${not page.hasPrevious}">&laquo;</span>
            <a class="page-link" th:if="${page.hasPrevious}"
            th:href="@{${page.url}(page=${page.paginaActual-2})}">&laquo;</a>
        </li>

        <li class="page-item" th:each="item : ${page.paginas}"
            th:class="${item.actual? 'page-item active': 'page-item'}"><span
            class="page-link" th:if="${item.actual}" th:text="${item.numero}"></span>
            <a class="page-link" th:if="${not item.actual}"
            th:href="@{${page.url}(page=${item.numero-1})}"
            th:text="${item.numero}"></a></li>


        <li class="page-item"
            th:class="${not page.hasNext? 'page-item disabled': 'page-item'}">
            <span class="page-link" th:if="${not page.hasNext}">&raquo;</span> <a
            class="page-link" th:if="${page.hasNext}"
            th:href="@{${page.url}(page=${page.paginaActual})}">&raquo;</a>
        </li>
        <li class="page-item"
            th:class="${page.last? 'page-item disabled': 'page-item'}"><span
            class="page-link" th:if="${page.last}">&Uacute;ltima</span> <a
            class="page-link" th:if="${not page.last}"
            th:href="@{${page.url}(page=${page.totalPaginas-1})}">&Uacute;ltima</a>
        </li>
    </ul>

</nav>

  • Primera
  • &拉阔;
  • &拉阔;
  • Ú;ltima

我有一个类似的情况,我使用了request参数。因此,技巧是根据我们执行的搜索捕获请求参数。然后,您可以(从URL)获取该参数,并在为分页而构建的链接中使用它

例如,假设您的post/get URL如下所示:

http://localhost:8080/listByName?name=earth
th:href="@{/listByName/(name=${#request.getParameter('name')},pageSize=${selectedPageSize}, page=${page})}"
然后获取“name”参数的值,并在html表/列表中构建分页url(链接)时使用它,如下所示:

http://localhost:8080/listByName?name=earth
th:href="@{/listByName/(name=${#request.getParameter('name')},pageSize=${selectedPageSize}, page=${page})}"

对我来说,它工作得很好。这样,您就不必使用flashAttributes或JavaScript编写额外的代码。

请提供您的表单代码。请注意,HTTP是无状态的,这意味着服务器上的每个请求(几乎所有时候)都是一个全新的请求。完成后,我添加了HTML(thymeleaf)表单和分页。@Lubelmont,您解决了这个问题吗?