当前位置: 首页 > 知识库问答 >
问题:

Spring Boot Thymeleaf-表单验证

常博裕
2023-03-14

我在验证表单时遇到了Thymeleaf问题。我正在尝试创建简单的用户注册表单来学习Spring,不幸的是我被卡住了。

这是我的UserForm类

public class UserForm {
    @NotEmpty
    private String username;
    @NotEmpty
    private String password;
    @NotEmpty
    private String passwordConfirm;

    \\ Getters and Setters
}

第一个问题是在initBinder中添加自定义验证器类时

@Autowired
private UserFormValidator formValidator;

@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.setValidator(formValidator);
}

@Not空验证注释的“默认”停止工作。这是预期行为吗?

第二个问题是如何在thymeleaf中显示全局拒绝消息
我的validator类如下所示

public class UserFormValidator implements Validator {
    @Autowired
    UserService userService;

    @Override
    public boolean supports(Class<?> clazz) {
        return UserForm.class.isAssignableFrom(clazz);
    }

    @Override
    public void validate(Object target, Errors errors) {
        UserForm userForm = (UserForm) target;
        if(!userForm.getPassword().equals(userForm.getPasswordConfirm())) {
            errors.reject("passwords.no.match", "Passwords not match");
        }

        if(userService.findOneByUsername(userForm.getUsername()).isPresent()) {
            errors.reject("user.exist", "User already exists (default)");
        }
    }   
}

和后映射从控制器

@PostMapping("/create")
public String registerUser(@ModelAttribute("form") @Valid final UserForm form, BindingResult bindingResult) {
    if(bindingResult.hasErrors()) {
        return "newuser";
    }
    userService.saveUser(form);
    return "redirect:/";
}

作为“默认”验证错误,我可以使用exth:if=“${#fields.hasErrors('passwordConfirm')}”显示,我不知道如何显示错误密码的消息。否。匹配或检查是否发生此错误?

共有1个答案

阎唯
2023-03-14

默认情况下,spring boot使用bean验证来验证带有@Valid注释的表单对象。如果您想使用自定义验证器并通过@InitBinder注册它,那么将不会进行bean验证,这是预期的行为。如果您希望bean验证也能与您的自定义验证一起工作,那么您需要在验证器类中甚至在控制器中手动执行。

这是显示密码不匹配错误消息的第二个问题。在您的自定义验证器UserFormValidator.class拒绝任何需要使用rejectValue()方法的值,如下所示:

    @Override
    public void validate(Object target, Errors errors) {
        UserForm userForm = (UserForm) target;
        if(!userForm.getPassword().equals(userForm.getPasswordConfirm())) {
            errors.rejectValue("passwordConfirm", "passwords.no.match", "Passwords not match");
        }

        if(userService.findOneByUsername(userForm.getUsername()).isPresent()) {
            errors.rejectValue("username", "user.exist", "User already exists (default)");
        }
    } 

rejectValue()方法用于向Errors对象添加验证错误。第一个参数标识与错误关联的字段。第二个参数是一个错误代码,它充当消息的消息键。属性文件(或messages\u en.properties或messages\u fr.properties等,如果正在使用)。rejectValue()的第三个参数表示回退默认消息,如果在资源包中找不到匹配的错误代码,则会显示该消息。

现在,您可以在表单中使用th:if=“${#fields.hasrerrors('passwordConfirm')}显示错误消息。

 类似资料:
  • CodeIgniter 提供了一个全面的表单验证和数据预处理类以帮助缩减你所写的代码。 概述 表单验证指南 表单 成功页面 控制器 设置验证规则 使用一个数组设置验证规则 级联规则(Cascading Rules) 预处理数据(Prepping Data) 重新填充表单(Re-populating the Form) 回调 设置错误信息 更改错误定界符 翻译表单域名字 独立显示错误 将一系列验证规

  • 表单请求验证类 必须 使用 表单请求 - FormRequest 类 来处理控制器里的表单验证。 验证类的 authorize 绝不 使用 authorize() 方法来做用户授权,用户授权我们会单独使用 Policy 授权策略 来实现。 使用基类 所有 FormRequest 表验证类 必须 继承 app/Http/Requests/Request.php 基类。基类文件如下: <?php n

  • pre { white-space: pre-wrap; } 本教程将向您展示如何验证一个表单。easyui 框架提供一个 validatebox 插件来验证一个表单。在本教程中,我们将创建一个联系表单,并应用 validatebox 插件来验证表单。然后您可以根据自己的需求来调整这个表单。 创建表单(form) 让我们创建一个简单的联系表单,带有 name、email、subject 和 mes

  • 主要内容:PHP 表单验证,文本字段,单选按钮,表单元素,PHP表单中需引起注重的地方?,如何避免 $_SERVER["PHP_SELF"] 被利用?,使用 PHP 验证表单数据,实例本章节我们将介绍如何使用PHP验证客户端提交的表单数据。 PHP 表单验证 在处理PHP表单时我们需要考虑安全性。 本章节我们将展示PHP表单数据安全处理,为了防止黑客及垃圾信息我们需要对表单进行数据安全验证。 在本章节介绍的HTML表单中包含以下输入字段: 必须与可选文本字段,单选按钮,及提交按钮: 查看代码 »

  • 主要内容:使用 JavaScript 进行表单验证,必填字段验证,数据格式验证表单是 Web 应用(网站)的重要组成部分,通过表单可以收集用户提交的信息,例如姓名、邮箱、电话等。由于用户在填写这些信息时,有可能出现一些错误,例如输入手机号时漏掉了一位、在输入的内容前后输入空格、邮箱的格式不正确等。为了节省带宽同时避免这些问题对服务器造成不必要的压力,我们可以使用 JavaScript 在提交数据之前对数据进行检查,确认无误后再发送到服务器。 使用 JavaScript 来验

  • 基本用法 Lumen 和 Laravel 一样,通过 Validation facade 让您可以简单、方便的验证数据正确性及查看相应的验证错误信息。 基本验证例子 $validator = Validator::make( ['name' => 'Dayle'], ['name' => 'required|min:5'] ); 上文中传递给 make 这个方法的第一个参数用来设

  • 表单验证是用于数据验证和错误收集的模块。 安装及测试 安装: go get github.com/astaxie/beego/validation 测试: go test github.com/astaxie/beego/validation 示例 直接使用示例: import ( "github.com/astaxie/beego/validation" "log"

  • CodeIgniter 提供了一个全面的表单验证和数据预处理类可以帮你少写很多代码。 Page Contents 表单验证类 概述 表单验证指南 表单 成功页面 控制器 试一下! 解释 设置验证规则 使用数组来设置验证规则 级联规则(Cascading Rules) 预处理数据 重新填充表单 回调:你自己的验证函数 使用任何可调用的方法作为验证规则 设置错误信息 翻译表单域名称 更改错误定界符 单