【问题标题】:Springboot Thymeleaf form validation not workingSpringboot Thymeleaf 表单验证不起作用
【发布时间】:2017-08-10 03:36:30
【问题描述】:

我正在尝试验证 Thymeleaf 中的字段,但错误未显示在视图页面中。

我的控制器

@Controller
public class UserController {

    private static final String ADD_NEW_USER="user/addUser";

    @Autowired
    UserService userService;
        @RequestMapping(value="/user/new", method=RequestMethod.GET)
    public String addUser(Registration register, Model model){
        model.addAttribute("register",register);
        return ADD_NEW_USER;
    }

    @RequestMapping(value="/user/new", method=RequestMethod.POST)
    public String addUser(@Valid Registration register, BindingResult result, Model model){
        model.addAttribute("register",register);
        if(result.hasErrors()){
           List<FieldError> err=result.getFieldErrors();

           for(FieldError e:err){
                System.out.println("Error on object ---> "+e.getObjectName()+" on field ---> "+e.getField()+". Message ---> "+e.getDefaultMessage());
           }
           return ADD_NEW_USER;
        }
        return INDEX_PAGE;
    }
}

查看模板

<form th:action="@{/user/new}" th:method="post" th:object="${register}" id="addUser" role="form">
    <fieldset>
        <legend> 
            <p>Field with <span class="required">*</span> are required</p>
        </legend>
        <div class="form-group">     
            <label for="name"><span class="required">* </span>Name: </label>
            <input type="text" th:field="*{name}" class="form-control" /> 
            <div th:if="${#fields.hasErrors('name')}" th:errors="*{name}" class="alert alert-danger">
            <p>Name is invalid</p>
            </div>
            <p class="help-block">Please provide full name for the user</p>
        </div>
        <div class="form-group">
            <label for="email"><span class="required">* </span> Email Address: </label> 
            <input class="form-control" type="email" th:field="*{email}"/>
            <div th:if="${#fields.hasErrors('email')}" th:errors="*{email}" class="alert alert-danger">
                <p>Email is invalid</p>
            </div>
            <p class="help-block">Please provide a valid email address. Activation link will be sent to this email</p>
        </div>
        <div class="form-group">
            <label for="password"><span class="required">* </span> Password: </label>
            <input type="password" th:field="*{password}" class="form-control"/>
        </div>
        <div class="form-group">
            <input class="btn btn-success" type="submit" name="Register" value="Register"/>
        </div>

    </fieldset>
</form><!-- ends register form -->

模态

@Entity
public class Registration {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;

    @NotEmpty
    @Size(min=3, max=50)
    @Column(nullable=false)
    private String name;

    @Email
    @NotEmpty
    @Column(nullable=false)
    private String email;

    private String password;

   //getters and setters
}

我可以像这样输出控制台错误。

Error on object ---> registration on field ---> name. Message ---> size must be between 3 and 50
Error on object ---> registration on field ---> email. Message ---> may not be empty
Error on object ---> registration on field ---> name. Message ---> may not be empty

我可能遗漏了一些东西,但找不到。

【问题讨论】:

    标签: forms validation spring-boot thymeleaf


    【解决方案1】:

    问题是实体的名称是注册,而您使用的对象的名称是注册。

    为了让它工作,在你的 @valid 注释旁边添加 @ModelAttribute("register") 即

     @RequestMapping(value="/user/new", method=RequestMethod.POST)
        public String addUser(@Valid @ModelAttribute("register") Registration register, BindingResult result, Model model){
    

    希望对你有帮助

    【讨论】:

    • 我今天硬着头皮想出了这个。
    【解决方案2】:

    我也遇到了同样的问题。尽管在表单中没有提取任何值,但我的 bindingResult.hasErrors() 始终返回 true。我不得不将我的验证从 @NotNull 更改为 @NotEmpty。

    @NotNull 只会验证对象是否为空,@NotEmpty 会检查对象是否有空字符串。

    【讨论】:

    • 让我免于拔毛。
    【解决方案3】:

    我也面临同样的问题。使用可能命中/试用方法,我发现 @Valid 注释不适用于 spring 2.3.0.RELEASE

    如果您使用的是 spring 2.3.0.RELEASE 则添加以下依赖项

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-validation</artifactId>
            </dependency>
    

    希望这会有所帮助。

    【讨论】:

    • 感谢您提及这一点!这正是我的问题!
    猜你喜欢
    • 1970-01-01
    • 2022-10-25
    • 2020-03-17
    • 2020-11-05
    • 2021-12-01
    • 2020-06-09
    • 1970-01-01
    • 2021-08-28
    • 2015-06-22
    相关资源
    最近更新 更多