在我将分页添加到我的Web应用程序后,现在我希望通过添加搜索栏(按名称)来过滤数据。
这是错误:
Failed to convert value of type 'java.lang.String' to required type 'java.lang.Integer';
nested exception is java.lang.NumberFormatException: For input string: "{pageNumber}"
org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to
convert value of type 'java.lang.String' to required type 'java.lang.Integer';
nested exception is java.lang.NumberFormatException: For input string: "{pageNumber}"
这是我的控制器中的方法:
@GetMapping(value = "/medecin/{pageNumber}")
public String list(@PathVariable Integer pageNumber, Model model,
@RequestParam(name = "size", defaultValue = "4") int size,
@RequestParam(name = "keyWord", defaultValue = "") String keyWord) {
Page<Medecin> page ;
if (keyWord==null)
page = medecinRepository.findAll(PageRequest.of(pageNumber - 1, size));
else
page = medecinRepository.findByNomContains(keyWord, PageRequest.of(pageNumber - 1, size));
List<Medecin> medecinList = page.getContent();
long totalItems = page.getTotalElements();
int totalPages = page.getTotalPages();
model.addAttribute("list", medecinList);
model.addAttribute("totalItems", totalItems);
model.addAttribute("totalPages", totalPages);
model.addAttribute("pageNumber", pageNumber);
return "medecin/list";
}
这是我的超文本标记语言文件的一部分:
<form th:action="@{/medecin/{pageNumber}}">
<button type="submit" class="btn btn-primary">CHERCHER</button>
<input type="text" name="keyWord" th:value="${keyWord}">
</form>
我想注意到,当替换时
考虑到搜索后的结果可能不止一页,我不得不修复它。
我认为问题在于如何构造th: action属性。您这样做的方式是传递文字{pageNumber}而不是它的解析值。
正确的方法可能是:
<form th:action="@{/medecin/{path}(path=${pageNumber})}">
有关更多解释,请参阅此线程:Thymeleaf构造URL变量
试试这个。添加@PathVariable("pageNumber")
public String list(@PathVariable("pageNumber") Integer pageNumber, Model model,
如果这不起作用,请尝试使pageNumber int而不是Integer。
你有两个选择
首先将值为pageNumber
的变量分配给名为pageNumber
的路径变量
<form th:action="@{/medecin/{pageNumber}(pageNumber = ${pageNumber})}">
<button type="submit" class="btn btn-primary">CHERCHER</button>
<input type="text" name="keyWord" th:value="${keyWord}">
</form>
第二个,您可以在双引号内创建一个带有单引号的字符串,以生成一个带有名为pageNumber
参数的路径
<form th:action="@{'/medecin/' + ${pageNumber}}">
<button type="submit" class="btn btn-primary">CHERCHER</button>
<input type="text" name="keyWord" th:value="${keyWord}">
</form>