gpt4 book ai didi

java - Spring 4.x 未显示 Thymeleaf 错误

转载 作者:行者123 更新时间:2023-12-01 07:24:01 24 4
gpt4 key购买 nike

我实际上正在关注Spring validation tutorial我可以让它正常工作,除了一件事。

事实上,如果我验证或不验证规则,重定向/模板返回效果会很好。

问题是我什至没有在我的模板中看到错误消息。我不知道出了什么问题,我使用与教程相同的代码,但它没有显示任何内容(模板渲染得很好)。

你能帮我吗?

Controller :

@RequestMapping(value = "/print", method = RequestMethod.POST)
public String printPost(@Valid PrinterEntity printerentity, BindingResult bindingResult, Model model) {
model.addAttribute("printed", printerentity.getName());
model.addAttribute("printerentity", new PrinterEntity());

if (bindingResult.hasErrors()) {
return "index";
}

return "printer/secretarea";
}

模板 View (索引):

<form method="post" th:action="@{/print}" th:object="${printerentity}">

<table>
<tr>
<td>
<input type="text" th:field="*{name}"/>
</td>
<td th:if="${#fields.hasErrors('name')}" th:errors="*{name}">
Name Error
</td>
</tr>
<tr>
<td>
<button type="submit">Valider</button>
</td>
</tr>
</table>

</form>

编辑:

表单页面:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head lang="en">

<meta charset="UTF-8"/>
<title></title>
</head>
<body>
<h1 th:if="${printed != null}" th:text="${printed}"></h1>

<form method="post" th:action="@{/print}" th:object="${printerEntity}">

<table>
<tr>
<td>
<input type="text" th:field="*{name}"/>
</td>
<td th:if="${#fields.hasErrors('name')}" th:errors="*{name}">
Name Error
</td>
</tr>
<tr>
<td>
<button type="submit">Valider</button>
</td>
</tr>
</table>

</form>

</body>
</html>

Controller :

@RequestMapping(value = "/print", method = RequestMethod.POST)
public String printPost(@Valid PrinterEntity printerEntity, BindingResult bindingResult, Model model) {
model.addAttribute("printed", printerEntity.getName());
model.addAttribute("printerEntity", new PrinterEntity());

if (bindingResult.hasErrors()) {
return "index";
}

return "printer/nocontent";
}

我可以在 Debug模式下使用断点查看错误内容并探索 que bindingResult 对象。错误在,但现在看来问题出在模板渲染上,错误没有显示。

最佳答案

BindingResult 使用对象的类名(采用驼峰命名法)将错误与您的对象关联起来。

在您的情况下,字段错误与 printerEntity 有关,而不是与 printerentity 有关(您应该能够在 Debug模式下看到它)。

如果您将模型中的对象重命名为 printerEntity,它将正确显示验证错误。

编辑

此外,您还在模型中使用对象的新实例,而不是使用在索引上创建并在表单中使用的实例。

所以你的 Controller 可能看起来像这样:

@RequestMapping({"", "/"})
public String index(Model model) {
model.addAttribute("printerEntity", new PrinterEntity());
return "index";
}

@RequestMapping(value = "/print", method = RequestMethod.POST)
public String printPost(@Valid PrinterEntity printerEntity, BindingResult bindingResult, Model model) {
model.addAttribute("printed", printerEntity.getName());
model.addAttribute("printerEntity", printerEntity);

if (bindingResult.hasErrors()) {
return "index";
}

return "printer/secretarea";
}

关于java - Spring 4.x 未显示 Thymeleaf 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28925853/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com