【问题标题】:Spring validator Invalid target for ValidatorSpring验证器Validator的目标无效
【发布时间】:2020-12-05 11:18:42
【问题描述】:

我正在尝试验证来自 HTML 表单的电子邮件输入。但是当我提交时,我收到了这个错误。

Java.lang.IllegalStateException:Validator [co2103.hw2.controller.TestResultsValidator@7d533032] 的目标无效:org.springframework.validation.BeanPropertyBindingResult:1 个错误 字段“电子邮件”上的对象“testResults”中的字段错误:拒绝值 [abc@le.ac.uk];代码 [email.testResults.email,email.email,email.java.lang.String,email];论据 [];默认消息 [已由其他用户提供!请使用另一个!] org.springframework.validation.DataBinder.assertValidators(DataBinder.java:542)

下面是验证码

public class TestResultsValidator implements Validator{
private TestResultsRepository TrRepo;
private HomeTestRepository HTRepo;
public TestResultsValidator (TestResultsRepository TrRepo, HomeTestRepository HTRepo) {
    this.TrRepo = TrRepo;
    this.HTRepo = HTRepo;
}
@Override
public boolean supports(Class<?> clazz) {
    return TestResults.class.equals(clazz);
}

@Override
public void validate(Object target, Errors errors) {
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "tTN", "", "required");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "fullname", "", "required");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "age", "", "required");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "gender", "", "required");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "address", "", "required");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "postCode", "", "required");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "testResult", "", "required");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "email", "", "required");

    TestResults tr = (TestResults) target;
    
    for(TestResults t : TrRepo.findAll()) {
        //SAME EMAIL
        if (tr.getEmail().equals(t.getEmail())) {
            errors.rejectValue("email", "email", "is already provided by a different user! Please user another one!");
        System.out.println("Email is already taken by a different user, please try another username");
        break;
        }

主控制器sn-p

//Add new results
@RequestMapping(value = "/addResults",method = {RequestMethod.POST , RequestMethod.GET})
public String newHotel(@Valid @ModelAttribute TestResults results, BindingResult result, Model model) {
    if (result.hasErrors()) {
         model.addAttribute("errors", result);
        return "start";
    }
    else {
    trRepo.save(results);
    return "Submitted";
}}

HTML 表单

<form id="input" action="/addResults" modelAttribute="results">

<label for="tTN">TTN: </label><br>
 <input type="text" id="tTN" name="tTN"><br>
 <label for="fullname">Full Name:</label><br>
 <input type="text" id="fullname" name="fullname">

<label for="email">Email:</label><br>
<input type="text" id="email" name="email">
<form:errors path="email"/><br/>

<label for="age">Age:</label><br>
<input type="text" id="age" name="age">
<label for="gender">Gender:</label><br>
 <input type="text" id="gender" name="gender">
    <label for="address">Address:</label><br>
  <input type="text" id="address" name="address">
   <label for="postCode">Post Code:</label><br>
   <input type="text" id="postCode" name="postCode">
    <label for="testResult">Result:</label><br>
  <input type="text" id="testResult" name="testResult">



<input type="submit" value="submit">

【问题讨论】:

    标签: java spring validation


    【解决方案1】:

    您的错误消息表明您的 TestResultsRepository 中已经存在 abc@le.ac.uk。您是否尝试过其他一些不在 repo 中的电子邮件,但仍然遇到这个问题?

    “email”字段上的“testResults”:拒绝值 [abc@le.ac.uk];代码 [email.testResults.email,email.email,email.java.lang.String,email]; 论据 [];默认消息[已由不同的 用户!请使用另一个!]

    【讨论】:

    • 您好,感谢您的回复,我已经更改了所有电子邮件,因此没有多个相同的电子邮件,但我仍然收到错误,如果我输入的电子邮件已经被使用了。
    猜你喜欢
    • 2021-03-18
    • 2017-10-27
    • 2017-07-25
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 2015-11-10
    相关资源
    最近更新 更多