我正在使用Spring靴和百里香叶。
我有一个带有表单的页面,该表单按特定参数搜索,然后将数据作为 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>
我有类似的情况,我使用了请求参数。因此,诀窍是根据我们执行搜索的内容捕获请求参数。然后,您可以获取该参数(从 URL)并在您正在为分页构建的链接中使用它。
例如,假设您的帖子/获取 URL 如下所示:
http://localhost:8080/listByName?name=earth
然后获取 “name” 参数的 vale,并在 html 表/列表中构建分页 url(链接)时使用它,如下所示:
th:href="@{/listByName/(name=${#request.getParameter('name')},pageSize=${selectedPageSize}, page=${page})}"
对我来说,它完美地工作。这样你就不必使用 flashAttributes 或 JavaScript 进行额外的代码处理。
null 是否可以让Spring将JSON字符串转换为MyMessage的实例,或者我应该放弃,将其作为字符串读取并自己执行转换?
从光盘启动 要从CDROM启动Slitaz,你要把Slitaz LiveCD的ISO文件刻录到一张空光盘内,然后重启电脑,再从光盘启动。 大多数情况下你的电脑已经默认设置为从光盘启动,如果你的电脑还没有设置好, 你可以在BIOS设置里设置启动顺序。你可以在开机前几秒种按下DEL键(也有可能是F11,F12等其它键,不过在中国大多数主板都是DEL)进入 BIOS,然后你就可以改变启动顺序了,你要设置
我有一个简单的Spring启动Web应用程序,它从数据库中读取并返回JSON响应。我有以下测试配置: 我有一个数据源 Bean,它是在应用程序的主配置中配置的。当我运行测试时,Spring 尝试加载上下文并失败,因为数据源取自 JNDI。一般来说,我想避免为此测试创建数据源,因为我有模拟的存储库。 是否可以在运行单元测试时跳过数据源的创建? 在内存中测试数据库不是一个选项,因为我的数据库创建脚本具
我在我的系统上设置了以下东西。 null
问题内容: 我想知道的是,在使用SpringMVC和Spring表单时,是否有一种更简单/更好的方式来处理动态表单(通过js向dom添加表单项)? 具有具有多个LineItem的Invoice对象的图像。 显示属于我当前使用的发票的项目 要添加LineItem,我需要一些js来计算新索引并将其添加到DOM。删除LineItem时,我目前必须对所有索引重新编号,这是我要避免的部分,这可能吗? 问题答
到目前为止,我发现了两种在启动时配置spring boot应用程序的方法,一种使用< code>-D,另一种使用< code> - ,如下所示: 有时,第一个有效,有时第二个有效。正如开发人员所发现的那样,当以下示例中的 方法未给出 参数时,方法不起作用,但 起作用。 而今天,我在命令行配置日志,发现 但 工作。 以上可能有其他原因,可能< code > log back . configurat
当我点击这个api时,我得到错误“415:Unsupported Media type”,这意味着不受支持的头。我想将文件从ARC加载到控制器。 我在pom.xml文件中添加了一些maven依赖项。 我的pom文件:
我有一个传统的SpringMVC(servlet堆栈)应用程序,它使用。在最近的Spring启动 2.2.0 版本中,为反应式堆栈 (webflux) 添加了 Kotlin 协程支持。我想知道在(servlet 堆栈)Spring MVC 中使用时,是否可行将 Kotlin 协程与 Web 客户端一起使用。