Spring Thymeleaf:表单验证不起作用

问题描述

我有一个试图验证的简单注册表格,但没有成功。表单绑定到具有某些javax.validation.constraints的bean“用户”。

当我手动拒绝一个值时,BindingResult和错误显示可以正常工作,尽管例如,在用户未填写@NotBlank字段时,它们不能按预期工作。它只是忽略它,BindingResult不包含任何错误并继续前进。

代码如下:

表格

<form th:action="@{/account/new}" th:object="${user}" method="post">
<table>
    <tr>
        <td>Nome:</td>
        <td><input type="text" th:field="*{name}" /></td>
        <td th:if="${#fields.hasErrors('name')}" th:errors="*{name}">Name Error</td>
    </tr>
    <tr>
        <td>Cognome:</td>
        <td><input type="text" th:field="*{lastname}" /></td>
        <td th:if="${#fields.hasErrors('lastname')}" th:errors="*{lastname}">Cognome Error</td>
    </tr>
    <tr>
        <td>Email:</td>
        <td><input type="email" th:field="*{email}" /></td>
        <td th:if="${#fields.hasErrors('email')}" th:errors="*{email}">Email Error</td>
    </tr>
    <tr>
        <td>Password:</td>
        <td><input type="password" th:field="*{password}" /></td>
        <td th:if="${#fields.hasErrors('password')}" th:errors="*{password}">Password Error</td>
    </tr>
    <tr>
        <td><button type="submit">Invia</button></td>
    </tr>
</table>
</form>

用户bean

import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Size;
import java.util.Set;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {

    public enum Role {
        ADMIN,UTENTE;
    }

@Id private String id;
@NotBlank private String name;
@NotBlank private String lastname;
@Email private String email;
@NotBlank @NotEmpty private Set<Role> roles;
@NotBlank private String username;
@NotBlank @Size(min=8) private String password;
@NotBlank private boolean active;

}

控制器

@PostMapping("/account/new")
public String saveUser(@Valid User user,BindingResult bindingResult,Model model) throws Exception {
    userRepository.findByEmail(user.getEmail())
            .ifPresent( s -> {  bindingResult.rejectValue("email","error.user","There is already a user registered with this email"); });

    if (bindingResult.hasErrors()) {
        model.addAttribute("user",user);
        return "registration";
    }

    userService.saveNewUser(user);
    return "registration-need-confirmation";
}

我想念什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)