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

2023-04-19 0 2,757

问题描述

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}" rel="external nofollow"  />
</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,难怪模版找不到要的值了

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

1. JK下载官网所有资源来源于开发团队,加入会员即可下载使用!如有问题请联系右下角在线客服!
2. JK下载官方保障所有软件都通过人工亲测,为每位会员用户提供安全可靠的应用软件、游戏资源下载及程序开发服务。
3. JK开发团队针对会员诉求,历经多年拥有现今开发成果, 每款应用程序上线前都经过人工测试无误后提供安装使用,只为会员提供安全原创的应用。
4. PC/移动端应用下载后如遇安装使用问题请联系右下角在线客服或提交工单,一对一指导解决疑难。

JK软件下载官网 技术分享 Spring boot validation错误信息在Controller中存在,但为什么在渲染页面时无法正常获取? https://www.jkxiazai.com/1580.html

JK软件应用商店是经过官方安全认证,保障正版软件平台

相关资源

官方客服团队

为您解决烦忧 - 24小时在线 专业服务