我正在使用弹簧靴和百里香叶。
我有一个页面,该页面具有通过特定参数搜索的形式,然后将数据作为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";
}
HTML:
<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}">«</span>
<a class="page-link" th:if="${page.hasPrevious}"
th:href="@{${page.url}(page=${page.paginaActual-2})}">«</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}">»</span> <a
class="page-link" th:if="${page.hasNext}"
th:href="@{${page.url}(page=${page.paginaActual})}">»</a>
</li>
<li class="page-item"
th:class="${page.last? 'page-item disabled': 'page-item'}"><span
class="page-link" th:if="${page.last}">Última</span> <a
class="page-link" th:if="${not page.last}"
th:href="@{${page.url}(page=${page.totalPaginas-1})}">Última</a>
</li>
</ul>
</nav>
答案 0 :(得分:0)
我遇到过类似的情况,我使用了请求参数。所以诀窍是根据我们执行的搜索来捕获请求参数。然后,您可以获取该参数(来自 URL)并在您为分页构建的链接中使用它。
例如,假设您的 post/get URL 如下所示:
http://localhost:8080/listByName?name=earth
然后获取“name”参数的值,并在像这样在 html 表/列表中构建分页 URL(链接)时使用它:
th:href="@{/listByName/(name=${#request.getParameter('name')},pageSize=${selectedPageSize}, page=${page})}"
对我来说它工作得很好。这样您就不必使用 flashAttributes 或使用 JavaScript 编写额外的代码。