Spring boot validation错误信息在Controller中存在,但为什么在渲染页面时无法正常获取?

问题描述

Spring boot validation错误信息在Controller中存在,但在渲染页面时无法正常获取
尝试通过println打印,发现controller中错误信息是正常存在的

问题出现的环境背景及自己尝试过哪些方法

Eclipse 2023-03
Spring Boot 2.7.10

相关代码

TestUser.java

@Data

@Entity

@AllArgsConstructor

@NoArgsConstructor(access=AccessLevel.PUBLIC, force=true)

public class TestUser{

@Id

@NotBlank(message = "user is required.")

private String name;

@Email(message = "wrong email format.")

@NotBlank(message = "email is required.")

private String email;

@NotBlank(message = "password is required.")

private String password;

}

TestUserController.java

@Controller

@RequestMapping("/user")

public class TestUserController {

@GetMapping

public String showRegisterForm() {

return "user";

}

@PostMapping

public String register(@Valid TestUser testUser, Errors errors) {

if (errors.hasErrors()) {

return "user";

}

return "redirect:/";

}

@ModelAttribute(name = "testUser")

public TestUser testUser() {

return new TestUser();

}

}

user.html

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml"

xmlns:th="http://www.thymeleaf.org">

<head>

<meta charset="UTF-8">

<title>User</title>

<link rel="stylesheet" th:href="@{/styles.css}" />

</head>

<body>

<form method="POST" th:action="@{/user}" th:object="${testuser}">

<div th:if="${#fields.hasErrors()}">

<span class="validationError">

Something went wrong.

</span>

</div>

<label for="name">Name: </label>

<input type="text" th:field="*{name}" />

<span class="validationError"

th:if="${#fields.hasErrors('name')}"

th:errors="*{name}">Name Error</span>

<br />

<label for="email">Email address: </label>

<input type="text" th:field="*{email}" />

<span class="validationError"

th:if="${#fields.hasErrors('email')}"

th:errors="*{email}">Email Error</span>

<br />

<label for="password">City: </label>

<input type="text" th:field="*{password}"/>

<span class="validationError"

th:if="${#fields.hasErrors('password')}"

th:errors="*{password}">Password Error</span>

<br/>

<input type="submit" value="Submit User"/>

</form>

</body>

</html>

你期待的结果是什么?实际看到的错误信息又是什么?

期待的结果是页面中类型为validationError的span标签正常渲染并在表单页面显示错误信息,但实际看到的情况是页面中这些span标签并没有被渲染


回答:

自己检查了半天发现是个很初级的错误,靠打印模型里的值才发现有两个testUser对象,模版里th:object写的是testuser,添加到模型的参数却是testUser,难怪模版找不到要的值了


回答:

这种好久没写了,你试下
你页面上用的fields对象取得错误信息
return user;之前将errors放到request中,name设置为fields

以上是 Spring boot validation错误信息在Controller中存在,但为什么在渲染页面时无法正常获取? 的全部内容, 来源链接: utcz.com/p/945114.html

回到顶部