0
votes

I am trying to validate the email input from a HTML form. But when I submit I am getting this error.

Java.lang.IllegalStateException: Invalid target for Validator [co2103.hw2.controller.TestResultsValidator@7d533032]: org.springframework.validation.BeanPropertyBindingResult: 1 errors Field error in object 'testResults' on field 'email': rejected value [[email protected]]; codes [email.testResults.email,email.email,email.java.lang.String,email]; arguments []; default message [is already provided by a different user! Please user another one!] org.springframework.validation.DataBinder.assertValidators(DataBinder.java:542)

Below is the Validator Code

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;
        }

The Main Controller snippet

//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";
}}

The HTML form

<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">
1

1 Answers

0
votes

Your error message is suggesting that [email protected] already exists in your TestResultsRepository. Did you try with some other email which is not present in the repo and still face this issue?

'testResults' on field 'email': rejected value [[email protected]]; codes [email.testResults.email,email.email,email.java.lang.String,email]; arguments []; default message [is already provided by a different user! Please user another one!]