未显示 Thymeleaf 错误 Spring 4.x
Thymeleaf error not displayed Spring 4.x
我实际上在关注 Spring validation tutorial,我可以让它正常工作,除了一件事。
事实上,如果我验证或不验证规则,redirections/template return 工作得很好。
问题是我什至没有在我的模板中看到错误消息。
我不知道出了什么问题,我使用了与教程相同的代码,但它没有显示任何内容(模板呈现得很好)。
你能帮帮我吗?
控制器:
@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";
}
模板视图(索引):
<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>
控制器:
@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";
}
我可以在带有断点的调试模式下查看错误内容并探索查询 bindingResult 对象。报错了,不过现在好像问题出在模板渲染上,报错不显示。
BindingResult
使用 camelCase 中对象的 class 名称将错误与您的对象相关联。
在您的情况下,字段错误与 printerEntity
而不是 printerentity
相关(您应该能够在调试模式下看到它)。
如果您在模型中将对象重命名为 printerEntity
,它将正确显示验证错误。
编辑
此外,您正在模型中使用对象的新实例,而不是使用您在索引上创建并在表单中使用的实例。
因此您的控制器可能如下所示:
@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";
}
我实际上在关注 Spring validation tutorial,我可以让它正常工作,除了一件事。
事实上,如果我验证或不验证规则,redirections/template return 工作得很好。
问题是我什至没有在我的模板中看到错误消息。 我不知道出了什么问题,我使用了与教程相同的代码,但它没有显示任何内容(模板呈现得很好)。
你能帮帮我吗?
控制器:
@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";
}
模板视图(索引):
<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>
控制器:
@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";
}
我可以在带有断点的调试模式下查看错误内容并探索查询 bindingResult 对象。报错了,不过现在好像问题出在模板渲染上,报错不显示。
BindingResult
使用 camelCase 中对象的 class 名称将错误与您的对象相关联。
在您的情况下,字段错误与 printerEntity
而不是 printerentity
相关(您应该能够在调试模式下看到它)。
如果您在模型中将对象重命名为 printerEntity
,它将正确显示验证错误。
编辑
此外,您正在模型中使用对象的新实例,而不是使用您在索引上创建并在表单中使用的实例。
因此您的控制器可能如下所示:
@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";
}